
經過一番挖掘,我設法發現,要獲取用戶首選終端模擬器的名稱(如 KDE5 設定的「預設應用程式」部分中設定的那樣),可以運行以下命令:
kreadconfig5 --file kdeglobals --group General --key TerminalApplication
就我而言(使用 KDE Plasma 5 運行 Manjaro),這會傳回字串「alacrtty」。因此,將其包裝起來$(...)
並在終端中輸入生成的命令會啟動用戶首選的終端模擬器(我已經測試過這項工作)。
然而,當我為 KDE 創建自訂鍵盤快捷鍵來運行此命令時Meta+Return
,什麼也沒有發生。我也嘗試把它放在exec
它前面以防萬一有必要,但它沒有改變任何東西。如果我只是設定運行命令的快捷方式alacritty
(這是我提到的第一個命令返回的命令),那麼它就可以工作,但當然我希望能夠運行用戶首選的終端,而不是特定的終端。
誰能向我解釋為什麼它不起作用?難道我做錯了什麼?
答案1
構造$(...)
(命令替換)是 POSIX shell 命令語言的一部分,需要 shell 才能解釋它。據我所知,桌面環境中包含的應用程式啟動器不需要能夠解釋 shell 命令語言;為了安全起見,我假設他們只能exec
使用一個檔案並向其傳遞一個參數清單。
您應該能夠定義一個調用類似以下內容的鍵盤快捷鍵:
sh -c '"$(kreadconfig5 ...)"'
命令替換用雙引號引起來,以確保替換命令產生的檔案路徑包含空格字元時不會失敗。
為了完整起見,請注意,如果可執行檔的名稱以一個或多個換行符號結尾(當然,極不可能),這仍然會失敗。