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


11

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ファイルを取得するにはどうすればよいですか?


1
.desktopファイルが$()そのようなサブシェルコマンドを呼び出すことはできないと思います。ファイルを開くためのサブシェルコマンドを含む別のスクリプトを呼び出すために必要だと思います。
テランス

確かにそうします。=)
テランス

1
HI @DKBose .desktopファイルは、正常に実行されるため、サブシェル実行できますExec=/bin/bash -c "echo $(date) > ~/out.txt"。これ+%Y%m%d%H%M%Sが問題のようです。まだ噛んでいます。
ジェイコブVlijm

%はすでに.desktopファイルの execのコマンドライン引数として使用されているため、最初のことは機能しないと思います。どうにかしてエスケープすることは可能かもしれませんが、他の解決策は問題ないようです。これをコメントとして追加しますが、ここのアカウントは新しいものです。
ミカエルケア

1
こんにちは@DKBose私の答えを参照してください:)
ジェイコブVlijm

回答:


10

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

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

Exec=/path/to/script

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

#!/bin/sh

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

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

chmod +x /path/to/script

お役に立てれば!


@JacobVlijmこの問題は、cron特定の文字(%?)をエスケープする必要がある場所で見られる問題と似ていますか?
DKボーズ

@DKBose非常にうまくいくかもしれませんが、私はまだそれをいじっています。サブシェルだけでも問題ありません。
ジェイコブVlijm

@JacobVlijmあなたはおそらく正しいでしょう。私はこれらのファイル内のサブシェルコマンドを避けるのが好きだということを発見しましたsources.list。apt のファイルのように、リリース名を置き換えることもできません$(lsb_release -sc)。あなたがそれを理解した場合、私はあなたがそれをどのようにしたかを見たいです。:)
テランス

こんにちはTerrance、動作します!私の答えを参照してください...
ジェイコブVlijm

@JacobVlijmを使用してみると+\%Y\%m\%d\%H\%M\%S、動作するはずです。
Videonauth

8

問題

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

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

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

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

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

そのため、疑わしいキャラクターを使わずに時間を取得するコマンドを探しました。

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

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

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

私たちがして、出力を少し編集する場合awkスペースや区切り文字を削除し、私たちは、私たちが望むだけのものを持っている、で作業コマンド.desktop我々が使用していないので、ファイル%

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


ここに画像の説明を入力してください

注意!

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


いいね!これは間違いなく別の方法です。Rubyをインストールしていませんでしたが、Rubyをインストールすると、確実に機能します。私はこれをいじることで、あなたが望むように見えるようにすることができることに同意します。:)
テランス

@Terranceは興味深い質問であることが判明しました。で問題に遭遇したことはありません.desktop...前に、このようなファイル
ヤコブVlijm

私もダメ。知っているのは良いことであり、このような質問に何度も答えることで、私たちも多くのことを学ぶことがわかりました。:)
テランス

1
@Terrance私が知っていることの99%は質問に答えることで学んだことです:)
ジェイコブVlijm

1
あなたは私の答えの言葉遣いも変えるように私を奮い立たせました。私は私の方法を最良の方法ではなく一方向に変更しました。そして、他のこのような変更は、人々がそれが唯一の方法だとは思わないようにします。ありがとうございました!:)
テランス
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.