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)or $(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 的建议,我成功了。谢谢!

相关内容