.desktop EXECコマンドから現在のパスを取得する

.desktop EXECコマンドから現在のパスを取得する

.desktopと同じディレクトリに保存されている.shを実行するために.desktopファイルをインポートしようとしています。ディレクトリ全体は、あるシステムから別のシステムに移動可能でなければなりません。

私の実行スクリプトはrun.sh

私は試した:

[Desktop Entry]
Type=Application
Terminal=true
Name=RunMe
#Exec=sh -c "`dirname %k`/run.sh"
#Exec=bash -c "export PATH=$PATH:`dirname %k`; bash run.sh;"
#Exec=bash -c "export PATH=$PATH:`dirname %k`; sh run.sh;"
Exec=bash -c "export PATH=$PATH:`dirname %k`; run.sh;"

しかし、.desktopファイルをダブルクリックすると何も起こりません。 「run.sh」をダブルクリックして「実行」を選択すると、スクリプトが正しく実行されます。 ""を使用してコマンドラインからスクリプトを実行すると、sh run.sh正常に動作します。

どのアイデアや実際に実行したいパスをデバッグする方法はありますか?

ベストアンサー1

~によるとデスクトップエントリの仕様:

フィールドコードは、引用されたパラメータ内で使用しないでください。

したがって、あなたのコマンドは%k文字通り提供されますbash。この行をExec次のように変更すると、これを防ぐことができます。

Exec=bash -c '"$(dirname "$1")"/run.sh' dummy %k

上記のコードはローカルで動作し、パスにスペースがある場合でも機能します。はスクリプト名として考えられるようにスクリプトdummyに提供され、拡張子はとして使用できます。ネストされた参照レイヤーは仕様に準拠し、スペースに安全でなければなりません。bash$0%k$1

必ずしもローカルファイルパスに拡張されるわけでは%kありません。 vfolder URI、空である可能性があり、真の移植性のあるスクリプトはこのような場合も考慮する必要があります。%kまた、それ自体は普遍的にサポートされていないため、使用するシステムにはいくつかの制限が必要です。


デバッグに関する限り、KDEで通常のシェルリダイレクトを使用できます。

Exec=bash -c ... > /tmp/desktop.log

これは標準化された動作ではなく、GNOMEや他の環境では機能しません。スクリプトに絶対パスを提供して、必要な方法で対応するパラメータと操作を記録することもできます。

おすすめ記事