【问题标题】:Re-run bash script in terminal when started without terminal在没有终端的情况下在终端中重新运行 bash 脚本
【发布时间】:2019-10-19 19:03:34
【问题描述】:
我想要一个脚本来检查它是否已从终端窗口中启动。如果它在没有窗口的情况下启动,它将在可见的终端窗口中重新运行。
如果找到此脚本行:
tty -s; if [ $? -ne 0 ]; then konsole -e "$0"; exit; fi
它工作正常。然而,由于它使用konsole,它是特定于 KDE 的。有没有更便携的解决方案,也可以在没有 KDE 的 Linux 系统上运行?
【问题讨论】:
标签:
bash
shell
terminal
konsole
【解决方案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' 检查您当前的标准输入是否连接到终端。您可能想要为有效显示添加测试(“$DISPLAY”)。如果不在某些窗口管理器下运行,启动终端窗口毫无意义。
您可以通过检查让您知道您是否在终端下运行的环境变量来进一步改进代码:“GNOME_TERMINAL_SCREEN”、“XTERM_SHELL”,或检查“$TERM”中的“xterm*”。