x-terminal-emulator 指令和 bash OR 邏輯

x-terminal-emulator 指令和 bash OR 邏輯

我正在嘗試的一些 bash OR 邏輯命令發生了奇怪的情況。通常一切正常:

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

這將嘗試執行 gnome-terminal,然後僅在第一個命令失敗時執行第二部分。例如,如果未安裝“gnome-terminal”(或我故意將其更改為“XXXXgnome-terminal”以導致其失敗),它將顯示“notify-send”錯誤。但否則「||」之後的第二個命令永遠不會運行,因為第一個命令成功了。

但這的作用有所不同:

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

這將打開一個終端機視窗(由 調用x-terminal-emulator),然後當我關閉該終端視窗時,它將繼續執行下一個命令並開啟第二個終端視窗(由gnome-terminal邏輯部分呼叫)。

我知道 x-terminal-emulator 是一個僅指向預設終端的符號連結。但它似乎導致 bash OR 邏輯相信它“失敗”,即使它成功了。

我嘗試了幾種不同的方法來包裝 x-terminal-emulator 命令(例如$(x-terminal-emulator)$(which x-terminal-emulator)),以使其更成功地為 OR 邏輯提供「成功」狀態,以便它之後的命令不會運行。但到目前為止還沒有任何效果。

有想法嗎?

程式碼的要點是:

  1. 嘗試呼叫使用者的預設終端,以防它與 gnome-terminal 不同。
  2. 如果「x-terminal-emulator」不存在,則僅執行 gnome-terminal。
  3. 如果失敗,則顯示錯誤通知。

這實際上是呼叫符號連結的錯誤x-terminal-emulator,還是因為它最終指向/usr/bin/gnome-terminal.wrapper並且沒有向 bash 邏輯發出「成功」程式碼而發生?

編輯:好的,它使命令變得更長、看起來更複雜,但下面的程式碼似乎運作可靠。它只會打開一個終端窗口,如果未設定為預設值,則會呼叫替代終端應用程序,但如果失敗則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 的建議,我讓它工作了。謝謝!

相關內容