Bash
在 .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
它工作正常。任何想法,甚至只是我如何調試它實際嘗試執行的路徑?
根據桌麵條目規範:
欄位程式碼不得在帶引號的參數內使用
因此,你
%k
的字面意思是bash
命令。將行更改Exec
為以下內容可避免這樣做:Exec=bash -c '"$(dirname "$1")"/run.sh' dummy %k
以上在本地工作,如果路徑中有空格也可以工作。
dummy
被賦予bash
腳本作為它的$0
(它認為腳本名稱是什麼),並且%k
’ 的擴展可以作為$1
. 嵌套的引用層對於符合規範和空間安全是必要的。請注意,
%k
它不一定擴展到本地文件路徑——它可以是 vfolder URI,也可以是空的,並且真正可移植的腳本也應該考慮這些情況。%k
本身也沒有得到普遍支持,因此無論如何您都需要對您希望在其上使用它的系統進行一些限制。就調試而言,您可以在 KDE 下使用普通的 shell 重定向:
Exec=bash -c ... > /tmp/desktop.log
這不是標準化的行為,它在 GNOME 和其他可能的情況下不起作用。您還可以為精心製作的腳本提供絕對路徑,以便以您需要的方式記錄其參數和操作。