Shell

如何檢查目前的 shell 會話是在 gui 還是 tty

  • June 24, 2018

zsh shell 中的哪個環境設置可以讓我找到我是在 x-server 中還是在控制台中?我正在嘗試找到一種方法來實現在我的 .zshrc 中設置不同的設置,無論何時我在我的終端模擬器中以及每當我在我的 tty/控制台中。

基本上我會有,

(虛擬碼)

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

我認為檢查目前 tty 是否像本地控制台一樣命名會更直接:

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

這只是檢查結果的一種方法;您可以使用 grep 或參數擴展,但它顯示了這個想法。

您還可以檢查$DISPLAY,但這不是保證,我無法想像您會在需要 X11 環境的 shell 提示符下做什麼。

感謝@Ignacio Vazquez-Abrams 和@Jeff Schaller(以及下面的其他評論者),我意識到 $ DISPLAY was the enviormental variable I needed. If you are in a display server the value held by $ DISPLAY將為 0將被返回(作為某事)。因此,以下程式碼(應該?)有效 -

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

謝謝大家。

引用自:https://unix.stackexchange.com/questions/451519