コマンドが端末で実行されるか(デスクトップファイルで?)を決定します(スクリプトから)。

コマンドが端末で実行されるか(デスクトップファイルで?)を決定します(スクリプトから)。

簡単にするために、新しいウィンドウでプログラムを実行するシェル関数を作成したいと思います。 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-スタート起動するアプリケーションの名前である引数が1つ以上必要です。名前は、「.desktop」サフィックスが含まれていないか、/usr/share/applicationにあるアプリケーションデスクトップファイル名と一致する必要があります。

関連情報