在没有终端的情况下启动时在终端中重新 运行 bash 脚本

Re-run bash script in terminal when started without terminal

我想要一个脚本来检查它是否已从终端内启动 window。如果它是在没有 window 的情况下启动的,它将在可见终端 window.

中重新 运行 自身

如果找到此脚本行:

tty -s; if [ $? -ne 0 ]; then konsole -e "[=12=]"; exit; fi

它工作正常。然而,由于它使用 konsole,它是特定于 KDE 的。在没有 KDE 的 Linux 系统上是否也有 运行 更便携的解决方案?

不存在适用于所有 window 系统的通用解决方案。但是,您可以考虑实施常见终端程序列表。好东西都带'-e'。

if [ ... ] ; then
   for t in konsole gnome-terminal xterm ; do
       if type "$t" >/dev/null 2>&1 ; then
          $t -e "$@"
          break
       fi
   done

另请注意,'tty -s' 检查您当前的标准输入是否已连接到终端。您可能想为有效显示添加一个测试(“$DISPLAY”)。如果不是 运行 在某个 window 经理的领导下,启动终端 window 毫无意义。

您可以通过检查环境变量来进一步改进代码,这些环境变量让您知道您是否在终端下 运行:'GNOME_TERMINAL_SCREEN'、'XTERM_SHELL',或检查“$TERM” 'xterm*'。