Bash

在 .desktop EXEC 命令中獲取目前路徑

  • April 19, 2021

我試圖讓一個.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 和其他可能的情況下不起作用。您還可以為精心製作的腳本提供絕對路徑,以便以您需要的方式記錄其參數和操作。

引用自:https://unix.stackexchange.com/questions/144422