Como posso distinguir uma janela de terminal (GUI) de um console (CTRL + ALT + F3)?

2

Eu uso um prompt bash colorido assim:

blue=$(tput setaf 4)
reset=$(tput sgr0)
bold=$(tput bold)
export PS1='($?) \[$bold$blue\]\u@\h:\w\[$reset\]$(__git_ps1)> '

Eu costumo trabalhar em uma janela de terminal (gnome-terminal), mas às vezes em um console de tela cheia ( CTRL + ALT + F3 ).

Meu prompt colorido está bem no terminal da GUI, mas difícil de ler em tela cheia, porque as cores parecem diferentes. Então, eu gostaria de usar uma cor diferente (por exemplo, cyan=$(tput setaf 6) ), quando na janela do console. Para que isso funcione, preciso descobrir em que modo estou no momento e definir meu $PS1 de acordo.

Eu tentei o comando tty . Isso dá

/dev/pts/0  # GUI terminal
/dev/tty3   # console 

Eu também tentei examinar o valor de $TERM . Isso dá

xterm-256color  # GUI terminal
linux           # console

Ambos funcionariam para mim, mas a minha pergunta é: Essa é a maneira correta de distinguir com segurança console vs. terminal ou existem maneiras melhores? Estou em 17.10.1 se isso importa .

    
por PerlDuck 17.02.2018 / 16:57

1 resposta

5

Existem várias maneiras de determinar isso, sendo três famosos:

  • tty - imprime o nome do arquivo do terminal conectado à entrada padrão:

    /dev/pts/10
    /dev/tty1
    
    Esta função escrita por Sergiy Kolodyazhnyy faz uso de tty .

  • ps hotty $$ (abreviação de ps --no-header --format tty --pid $$ ):

    pts/10
    tty1
    
  • who who whom | awk '{ print $2 }' (na verdade, isso é who com dois argumentos arbitrários , igual a who -m - que também corresponde ao trocadilho):

    pts/10
    tty1
    

Eu suspeito que os valores de TERM sejam diferentes entre distribuições e até mesmo lançamentos, mas tty é uma maneira estável e confiável. Eu usaria assim:

if tty|grep -q tty; then
  echo "That's a TTY."
else
  echo "That's not a TTY."
fi

Parece haver um problema com pelo menos who em gnome-terminal , por sorte há um script de wrapper para contornar esta questão.

Links úteis:

por dessert 17.02.2018 / 17:18