Como meu script pode saber quando estou em um console virtual versus um xterm?

11

Alguns dos meus scripts (alteração do mapa de teclas, adição de chave pública) precisam agir de maneira diferente quando em um console virtual e em um xterm. Qual é o código real para

#!/bin/ksh
if [[ in_a_virtual_console ]]; then
...
else
...
fi
John Baber-Lucero
fonte

Respostas:

6

Parece-me que você deseja verificar se existe ou não um servidor X ao qual se conectar.

Algo como:

if [ -n "$DISPLAY" ]; then
  : X
else
  : no X
fi
Stéphane Chazelas
fonte
1
Nunca estive na posição de ter três respostas perfeitas no stackexchange.
John Baber-Lucero
9

Se você pretendia distinguir os shells interativos dos não interativos, use testo suporte embutido para detectá-lo (não tenho certeza se o ksh o possui, mas o binário do coreutils também o suporta):

test -t 0 # will return 0 for interactive shells

Se você realmente quis dizer se está em um tty / pty / pts ou outra coisa, analise a saída em tty:

$ tty # konsole
/dev/pts/4
$ tty # virtual terminal
/dev/tty2
lynxlynxlynx
fonte
Nunca estive na posição de ter três respostas perfeitas no stackexchange.
John Baber-Lucero
7

Isso vai depender do sistema operacional. Para Linux, você pode fazer isso:

#!/bin/ksh

if [ "$TERM" == "linux" ]; then
  echo "I'm in a virtual console"
else
  echo "I'm not in a virtual console"
fi

Obviamente, isso pressupõe que você não alterou a TERMvariável de ambiente, que é definida automaticamente linuxsomente quando você faz login em um console virtual (no Ubuntu, ele é definido xtermem aplicativos de console, mas isso pode variar entre os sistemas operacionais). Verifique o conteúdo do TERM nos vários aplicativos que você está usando e defina conforme apropriado.

teppic
fonte
Nunca estive na posição de ter três respostas perfeitas no stackexchange.
John Baber-Lucero