Como verificar se a sessão atual do shell está no gui ou no tty

1

Qual configuração de ambiente no shell zsh permitirá que eu encontre se estou no servidor x ou se estou no console? Eu estou tentando encontrar uma maneira de implementar com configuração diferente no meu .zshrc para sempre que eu estou no meu emulador de terminal e sempre que estou no meu tty / console.

Basicamente eu vou ter,

(pseudocódigo)

if(current shell session is in console)
[
    implement PROMPT x
]else[
    implement PROMPT Y
] 
    
por user279540 24.06.2018 / 01:45

3 respostas

2

Acho mais fácil verificar se o nome atual é nomeado como os consoles locais:

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

Essa é apenas uma maneira de verificar o resultado; você poderia usar grep ou expansão de parâmetros, mas mostra a ideia.

Você também pode verificar $DISPLAY , mas isso não é uma garantia, e não consigo imaginar o que você faria em um prompt do shell que exigiria um ambiente X11.

    
por 24.06.2018 / 15:11
0

Graças a @Ignacio Vazquez-Abrams e @Jeff Schaller (e outros comentaristas abaixo), percebi que $ DISPLAY era a variável ambiental que eu precisava. Se você estiver em um servidor de exibição, o valor mantido por $ DISPLAY será 0 será retornado (como algo). Assim, o seguinte código (deveria?) Funciona -

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

Obrigado a todos.

    
por 24.06.2018 / 02:02
0

Quando você trabalha no console, você faz o primeiro login.
Então, se você procurar por login, você pode saber onde você está.

Você pode tentar isso:

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