简化一下,我想编写一个在新窗口中运行程序的 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
文件(即不使用locate
并grep
查找.desktop
文件并解析它们)?
所以在准代码中我想填补以下空白
myopen() {
TERMINALFIELD=$(xdg-app-uses-terminal $1) # this line is made up
if [[ TERMINALFIELD == true ]]; then
urxvt -e "$@"
else
$@
fi
return $?
}
答案1
看起来gtk-launch
会做你想做的事。它将使用.desktop
文件中的信息启动应用程序。以下是手册页中的一些相关信息:
gtk-启动至少需要一个参数,即要启动的应用程序的名称。该名称应与位于 /usr/share/application 中的应用程序桌面文件名相匹配,带或不带“.desktop”后缀均可。