确定(在脚本中)命令是否在终端中运行(从桌面文件?)

确定(在脚本中)命令是否在终端中运行(从桌面文件?)

简化一下,我想编写一个在新窗口中运行程序的 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 $?
}

答案1

看起来gtk-launch会做你想做的事。它将使用.desktop文件中的信息启动应用程序。以下是手册页中的一些相关信息:

gtk-启动至少需要一个参数,即要启动的应用程序的名称。该名称应与位于 /usr/share/application 中的应用程序桌面文件名相匹配,带或不带“.desktop”后缀均可。

相关内容