如何检测我是否处于“全屏” bash shell 或 GUI 终端窗口中?

如何检测我是否处于“全屏” bash shell 或 GUI 终端窗口中?

我有一些代码,.bashrc使用当前运行的命令设置终端窗口标题,它在 Unity 中运行良好,因为终端位于窗口中。但是,当我使用 ++ 终端(无论它叫什么)登录时Ctrl,我的提示符中充满了垃圾,即设置(不存在的)窗口标题的各种转义序列AltF1

我怎样才能从 bash 脚本中检测我是否在其中一个脚本中?

答案1

如果您在 GUI 终端窗口中,则您不在登录 shell 中。如果您在 tty 中,则您肯定在登录 shell 中。要测试这些,您可以使用:

shopt -q login_shell && echo 'Login shell' || echo 'Not login shell'

或者更简单:

shopt | grep login

语句中使用的示例if

login_shell=$(shopt | grep login | cut -f2)
if [ "$login_shell" = "on" ]; then 
    echo 'Login shell'
    # do stuff in login shell
else
    echo 'Not login shell'
    # do stuff in non login shell
fi

答案2

没有比这更简单的了:

echo "$TERM"

如果它返回“xterm”,则表示您位于终端窗口中,
如果它返回“linux”,则表示您位于虚拟(Ctrl-Alt-F1)终端中

答案3

在 X11 会话的终端窗口中,通常会设置 DISPLAY 环境变量(除了使用 su 的某些情况);在控制台中通常不会出现这种情况。

相关内容