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

问题描述 投票:0回答:1

我希望脚本检查是否已从终端窗口中启动。如果启动时没有窗口,它将在可见的终端窗口中重新运行。

如果找到此脚本行:

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

效果很好。但是,由于它使用konsole,因此它特定于KDE。还有没有在没有KDE的Linux系统上运行的更便携的解决方案吗?

bash shell terminal konsole
1个回答
1
投票

不存在适用于所有窗口系统的通用解决方案。但是,您可以考虑实施常见的终端程序列表。好东西全都是'-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'检查您当前的stdin是否已连接到终端。您可能要添加一个有效显示的测试(“ $ DISPLAY”)。如果没有在某些窗口管理器中运行,则启动终端窗口毫无意义。

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

© www.soinside.com 2019 - 2024. All rights reserved.