我有一些代码,.bashrc
使用当前运行的命令设置终端窗口标题,它在 Unity 中运行良好,因为终端位于窗口中。但是,当我使用 ++ 终端(无论它叫什么)登录时Ctrl,我的提示符中充满了垃圾,即设置(不存在的)窗口标题的各种转义序列Alt。F1
我怎样才能从 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 的某些情况);在控制台中通常不会出现这种情况。