![如何检查当前 shell 会话是在 gui 还是 tty 中](https://linux22.com/image/135753/%E5%A6%82%E4%BD%95%E6%A3%80%E6%9F%A5%E5%BD%93%E5%89%8D%20shell%20%E4%BC%9A%E8%AF%9D%E6%98%AF%E5%9C%A8%20gui%20%E8%BF%98%E6%98%AF%20tty%20%E4%B8%AD.png)
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"