x-terminal-emulator コマンドと bash OR ロジック

x-terminal-emulator コマンドと bash OR ロジック

私が試しているいくつかの bash またはロジック コマンドで奇妙な現象が発生しています。通常はすべて正常に動作します。

/bin/bash -c "gnome-terminal || notify-send 'ERROR'"

これは gnome-terminal の実行を試み、最初のコマンドが失敗した場合にのみ 2 番目の部分を実行します。たとえば、「gnome-terminal」がインストールされていない場合 (または失敗するように意図的に「XXXXgnome-terminal」に変更した場合)、「notify-send」エラーが表示されます。ただし、それ以外の場合は、最初のコマンドが成功したため、「||」の後の 2 番目のコマンドは実行されません。

しかし、これは動作が異なります:

/bin/bash -c "x-terminal-emulator || gnome-terminal || notify-send 'ERROR'"

これにより、ターミナル ウィンドウ ( によって呼び出されますx-terminal-emulator) が開き、そのターミナル ウィンドウを閉じると、次のコマンドに進み、2 番目のターミナル ウィンドウ (gnome-terminalロジックの一部によって呼び出されます) が表示されます。

x-terminal-emulator は、デフォルトのターミナルを指すだけのシンボリックリンクであることは理解しています。しかし、成功した場合でも、bash OR ロジックが「失敗した」と認識してしまう原因となっているようです。

$(x-terminal-emulator)私は、 x-terminal-emulator コマンド ( orなど) をラップして、OR ロジックに「成功」​​ステータスをより適切に提供し、その後のコマンドが実行されないようにするいくつかの異なる方法を試しまし$(which x-terminal-emulator)た。しかし、これまでのところ何も機能していません。

アイデアは?

コードのポイントは次のとおりです。

  1. gnome-terminal と異なる場合は、ユーザーのデフォルト端末を呼び出してみます。
  2. 「x-terminal-emulator」が存在しない場合は、gnome-terminal を実行するだけにします。
  3. 失敗した場合は、エラー通知を表示します。

これは実際にシンボリック リンクの呼び出しに問題があるのでしょうx-terminal-emulatorか、それとも最終的に を指していて/usr/bin/gnome-terminal.wrapper、bash ロジックに「成功」​​コードを返さないために発生しているのでしょうか。

編集: わかりました。コマンドは長くなり、見た目も複雑になりますが、以下のコードは確実に動作するようです。ターミナル ウィンドウを 1 つだけ表示し、デフォルトとして設定されていない場合は代替ターミナル アプリを呼び出しますが、失敗した場合gnome-terminalはフォールバックします。また、他の代替手段をいくつでも追加して試すことができるはずです。gnome-terminalx-terminal-emulator

/bin/bash -c "if [[ -x $(type -p x-terminal-emulator) ]]; then x-terminal-emulator; elif [[ -x $(type -p gnome-terminal) ]]; then gnome-terminal; else notify-send 'ERROR: App not found' 'Install a terminal app'; fi"

下記の @waltinator からの提案のおかげで動作するようになりました。ありがとうございます!

関連情報