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

10

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

#!/bin/ksh
if [[ in_a_virtual_console ]]; then
...
else
...
fi
    
por John Baber-Lucero 03.09.2012 / 16:33

3 respostas

5

Parece-me que você quer verificar se existe ou não um servidor X para se conectar.

Algo como:

if [ -n "$DISPLAY" ]; then
  : X
else
  : no X
fi
    
por 03.09.2012 / 22:13
8

Se você quisesse distinguir shells interativos de não interativos, use o suporte interno do test 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 algo mais, analise a saída de tty :

$ tty # konsole
/dev/pts/4
$ tty # virtual terminal
/dev/tty2
    
por 03.09.2012 / 16:50
6

Isso dependerá do sistema operacional. Para o Linux, você poderia 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

Isso, obviamente, pressupõe que você não tenha alterado a variável de ambiente TERM , que é automaticamente definida como linux apenas quando você faz logon em um console virtual (no Ubuntu ela está definida como xterm no console aplicativos, mas isso pode variar entre sistemas operacionais). Verifique o conteúdo do TERM nas várias aplicações que você está usando e defina como apropriado.

    
por 03.09.2012 / 17:21