如何检查当前 shell 会话是在 gui 还是 tty 中

如何检查当前 shell 会话是在 gui 还是 tty 中

zsh shell 中的哪个环境设置允许我确定我是在 x-server 中还是在控制台中?我试图找到一种方法来实现在我的 .zshrc 中具有不同的设置,无论何时我在我的终端模拟器中以及每当我在我的 tty/控制台中。

基本上我会有,

(伪代码)

if(current shell session is in console)
[
    implement PROMPT x
]else[
    implement PROMPT Y
] 

答案1

我认为检查当前 tty 是否像本地控制台那样命名会更直接:

case $(tty) in 
  (/dev/tty[1-9]) PS1='console version';; 
              (*) PS1='not console version';; 
esac

这只是检查结果的一种方法;您可以使用 grep 或参数扩展,但它显示了这个想法。

您还可以检查$DISPLAY,但这并不能保证,而且我无法想象您会在需要 X11 环境的 shell 提示符中做什么。

答案2

感谢@Ignacio Vazquez-Abrams 和@Jeff Schaller(以及下面的其他评论者),我意识到 $DISPLAY 是我需要的环境变量。如果您在显示服务器中,则 $DISPLAY 持有的值将返回 0(作为某些内容)。因此,下面的代码(应该?)可以工作——

if [[ -n $DISPLAY ]];
then
    PROMPT = (etc)
else 
    PROMPT = (etc2)
fi

谢谢大家。

答案3

当您在控制台上工作时,您首先登录。
因此,如果您查找登录信息,您就可以知道自己在哪里。

你可以试试这个:

[ "$(ps -t $(ps -o comm= -o tty= | \
awk '$1=="ps"{print $2}') | \
grep [l]ogin)" ] && \
echo "console" || echo "terminal"

相关内容