Como detecto se estou em uma janela bash shell ou terminal de GUI 'full screen'?

4

Eu tenho algum código no meu .bashrc que define o título da janela do terminal usando o comando atualmente em execução e funciona muito bem no Unity, onde o terminal está em uma janela. No entanto, quando estou logando com o terminal Ctrl + Alt + F1 (seja qual for o nome), meu prompt fica cheio de lixo que é várias seqüências de escape que definem o título da janela (inexistente).

Como posso detectar a partir de um script bash se estou em um ou outro?

    
por Nick T 23.09.2013 / 23:01

3 respostas

4

Se você estiver em uma janela de terminal da GUI, não está em um shell de login. E se você estiver em tty, você tem certeza em um shell de login. Para testá-los, você pode usar:

shopt -q login_shell && echo 'Login shell' || echo 'Not login shell'

ou mais simples:

shopt | grep login

Exemplo para usar em uma instrução 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
    
por Radu Rădeanu 23.09.2013 / 23:11
5

Não pode ser muito mais simples que isso:

echo "$TERM"

se ele retorna "xterm" você está em uma janela de terminal
se ele retorna "linux" você está em um terminal virtual (Ctrl-Alt-F1)

    
por thom 29.10.2013 / 02:30
0

Em uma janela de terminal em uma sessão X11, a variável de ambiente DISPLAY normalmente será configurada (exceto em alguns casos em que su é usado); isso geralmente não será o caso em um console.

    
por rackandboneman 07.09.2016 / 13:57