Command-Line

確定(在腳本中)命令是否在終端中執行(來自桌面文件?)

  • December 25, 2016

簡化下來,我想編寫一個在新視窗中執行程序的 shell 函式。對於像 emacs、firefox、gitk 這樣的應用程序,可能看起來像這樣:

myopen() {
 $@
}

但我想在新終端中打開在終端中執行的應用程序,例如對於 alsamixer、vim、bash、zsh,它應該看起來像

myopen() {
 urxvt -e "$@"
}

我已經看到 .desktop 文件包含是否應該在終端中執行的資訊(對於 vim / gvim)

[Desktop Entry]
Name=Vim
GenericName=Text Editor
TryExec=vim
Exec=vim %F
Terminal=true

或者

[Desktop Entry]
Name=GVim
GenericName=Text Editor
TryExec=gvim
Exec=gvim -f %F
Terminal=false

是否有現有的介面來查詢Terminal文件(即不使用locategrep查找.desktop文件並解析它們)?

所以在準程式碼中我想填補空白

myopen() {
 TERMINALFIELD=$(xdg-app-uses-terminal $1) # this line is made up
 if [[ TERMINALFIELD == true ]]; then
   urxvt -e "$@"
 else
   $@
 fi
 return $?
}

看起來gtk-launch會做你想做的事。它將使用.desktop文件中的資訊啟動應用程序。以下是手冊頁中的一些相關資訊:

gtk-launch至少需要一個參數,即要啟動的應用程序的名稱。該名稱應與位於 /usr/share/application 中的應用程序桌面文件名匹配,帶或不帶“.desktop”後綴。

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