web-dev-qa-db-ja.com

Execのタイムスタンプ= .desktopファイルの行は可能ですか?

Lubuntu 16.04-Openboxセッション

ターミナルを使用して、geditでタイムスタンプ付きファイルを開くことができます。

gedit ~/$(date +%Y%m%d%H%M%S).txt

このコマンドは、Openboxのキーボードショートカットからも使用できます。

<keybind key="W-4">        # gedit time-stamped file
  <action name="Execute"><command>sh -c 'gedit ~/$(date +%Y%m%d%H%M%S).txt'</command></action>
</keybind>

しかし、Exec=ファイルの.desktop行を介して同じことを行うことはできません。

Exec=sh -c 'gedit ~/$(date +%Y%m%d%H%M%S).txt'

~/.txtというファイルを作成するだけです

それで、私が望むことをするために.desktopファイルを取得するにはどうすればよいですか?

11
DK Bose

残念ながら、.desktopファイルは、常にサブシェル$()コマンドを希望どおりに呼び出すとは限りません。私が見つけたこれを行う1つの方法は、そのようなファイルを開くサブシェルコマンドを含む別のスクリプトを作成することです。

Exec行は次のようになります。

Exec=/path/to/script

スクリプトファイルには、新しいファイルを開くコマンドが含まれます。

#!/bin/sh

gedit ~/$(date +%Y%m%d%H%M%S).txt

スクリプトも実行可能でなければなりません:

chmod +x /path/to/script

お役に立てれば!

10
Terrance

問題

スクリプトは必要ありません。

問題は、.desktopファイルがサブシェルでコマンドを実行できないということではありません。

Exec=/bin/bash -c "echo $(date) > ~/out.txt"

.desktopファイルで完全に機能します。

コマンドをいじって、%文字が問題を引き起こしているという結論に達しました。私にはそれについての説明はありませんが、これまでのところ、それを解決または回避する方法に関する情報を見つけることができませんでした。

そのため、疑わしい文字を使用して時間を取得するコマンドを探しましたwithout

または、日付と時刻にRubyを使用します

これにより、Rubyが表示され、コマンドから現在の日付と時刻が生成されます。

$ Ruby -e 'puts Time.now.inspect'
2016-05-29 16:12:36 +0200

awkを使用して出力を少し編集し、スペースと区切り文字を削除すると、and.desktopファイル内の作業コマンド。%を使用しないためです。

Exec=/bin/bash -c  "gedit ~/$(Ruby -e 'puts Time.now.inspect' | awk -F'[: -]' '{print $1$2$3$4$5$6}')"


enter image description here

注意!

間違いなく、コマンドは少し「チャーミング」される可能性があります。おそらく今日か明日、少し答えを編集します。

8
Jacob Vlijm