Quoting
如何在包含保留字元的 .desktop 文件中正確編寫 Exec 鍵的命令?
我正在嘗試為 Minecraft 創建一個 .desktop 文件。執行文件時似乎沒有任何反應。我嘗試按如下方式分配 Exec 鍵:
Exec= java -jar "~/.minecraft/Minecraft.jar"
Exec= java -jar "$HOME/.minecraft/Minecraft.jar"
但我不確定如何正確輸入保留字元(~ 和 $)。根據 Freedesktop 的桌麵條目規範:
如果參數包含保留字元,則必須引用該參數。
和
引用必須通過將參數括在雙引號之間並在雙引號字元、反引號字元 ("`")、美元符號 ("$") 和反斜杠字元 ("") 前加上一個額外的反斜杠字元來轉義。實現必須在擴展域程式碼和將參數傳遞給可執行程序之前撤消引用。
但這讓我很困惑。
這似乎是一種常見的解決方法
sh
,它將正確解析特殊符號和變數:Exec=sh -c "java -jar ~/.minecraft/Minecraft.jar"
在您的 .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'
解釋:
- 所有術語,如雙引號、引號、元字元(如 $ 和 ~)總是與 shell 相關 - shell(命令解釋器,如 bash 或 dash)(順便說一句)獨立於任何終端(如 xterm)。
- 當您希望將波浪號或 shell-var $HOME 擴展為某事時。像 /home/myloginname 這只能由 /bin/bash 或 /bin/sh (==/bin/dash) 完成。
- xdg-desktop-interpreter 的 Exec-line 需要一個真實的程序(path-to-a-bin-file)並且永遠不會直接擴展任何 shell-stuff,而是通過為 sh-command 提供選項 -c ‘command-string ; 命令… ; cmd …‘一切都應該正常工作。
- %u 是一個“xdg-placeholder”,並獨立更改為 DnD-URL(在執行 shell-command-line 之前)
- 請注意,您可以使用 # … 註釋掉 .desktop 文件中的行
PS:
! case coproc do done elif else esac fi for function if in select then until while { } time [[ ]]
都是“保留字”(不要將其與 shell 的內置命令混淆),但是 ~ 和 $ are meta-chars (the tilde must be un-quoted to be expanded, while $ MYVAR 可能會被引用,如果它在路徑中包含空格)
親切的問候 EOF