予約された文字を含む.desktopファイルにExecキーコマンドを正しく作成するにはどうすればよいですか?

予約された文字を含む.desktopファイルにExecキーコマンドを正しく作成するにはどうすればよいですか?

Minecraft用の.desktopファイルを作成しようとしています。ファイルの実行時に何も起こらないようです。次のようにExecキーを割り当ててみました。

Exec= java -jar "~/.minecraft/Minecraft.jar"

Exec= java -jar "$HOME/.minecraft/Minecraft.jar"

しかし、予約文字(〜、$)をどのように入力するのかわかりません。 Freedesktopによるとデスクトップエントリの仕様:

パラメーターに予約されている文字が含まれている場合は、引用符で囲む必要があります。

そして

引用符を完成させるには、二重引用符文字、バックティック文字 ("`")、ドル記号 ("$")、バックスラッシュ文字 ("\") をエスケープする必要があります。実装では、フィールドコードを拡張する前と実行プログラムに引数を渡す前に参照を取り消す必要があります。

しかし、これが私を混乱させます。

答え1

shこれは特別なシンボルと変数を正しく解決する一般的な回避策のようです。

Exec=sh -c "java -jar ~/.minecraft/Minecraft.jar"

答え2

.desktop ファイルに以下を作成します。

Exec=sh -c 'java -jar "$HOME"/.minecraft/Minecraft.jar'

サンプル2:

Exec=sh -c "u=%u; k=%k; c=%c;"' kd="$k"; [ -f "$kd" ] && kd=`dirname "$k"`; cd "$kd"; uxterm -bg blue -fg cyan3 -fn 9x15'

説明する:

  • 二重引用符、引用符、$、〜などのメタ文字など、すべての用語は常にシェルに相対的です。シェル(bashやダッシュなどのコマンドソルバー)は、(btw)すべての端末(xtermなど)とは無関係です。

  • チルダまたはshell-var $ HOMEを何かに拡張したい場合。 /home/myloginname と同様に、/bin/bash または /bin/sh(==/bin/dash) でのみこの操作を実行できます。

  • xdg-desktop-interpreterのExec行は実際のプログラム(binファイルパス)を予想し、シェルの内容を直接拡張しませんが、shコマンドオプション-c 'command-string ... cmd.. .'これですべてがうまくいくでしょう。

  • %uは「xdg-placeholder」で、DnD-URLに独立して変更されます(シェルコマンドラインを実行する前)。

  • #...を使用して.desktopファイルの行をコメントアウトできます。

添付:

! case   coproc   do  done elif else esac fi for function if in select
then until while { } time [[ ]]

「予約語」(シェルの組み込みコマンドと混同しないでください)ですが、〜と$はメタ文字です(拡張するにはチルダを引用符で囲む必要があり、$ MYVARはパスにスペースが含まれている場合は引用できます)。

フレンドリーな安否 末梢血

関連情報