¿Cómo puede saber mi script cuando estoy en una consola virtual frente a una xterm?

11

Algunas de mis secuencias de comandos (cambio de mapa de teclas, adición de clave pública) deben actuar de manera diferente cuando están en una consola virtual o en una xterm. ¿Cuál es el código real para

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

Respuestas:

6

Me parece que quiere verificar si hay o no un servidor X para conectarse.

Algo como:

if [ -n "$DISPLAY" ]; then
  : X
else
  : no X
fi
Stéphane Chazelas
fuente
1
Nunca he estado en la posición de tener tres respuestas perfectas en stackexchange.
John Baber-Lucero
9

Si pretendía distinguir los shells interactivos de los no interactivos, use testel soporte incorporado para detectarlo (no estoy seguro si ksh lo tiene, pero el binario de coreutils también lo admite):

test -t 0 # will return 0 for interactive shells

Si realmente quisiste decir si estás en un tty / pty / pts o algo más, analiza la salida desde tty:

$ tty # konsole
/dev/pts/4
$ tty # virtual terminal
/dev/tty2
lynxlynxlynx
fuente
Nunca he estado en la posición de tener tres respuestas perfectas en stackexchange.
John Baber-Lucero
7

Esto dependerá del sistema operativo. Para Linux, podría hacer esto:

#!/bin/ksh

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

Esto, por supuesto, supone que no ha cambiado la TERMvariable de entorno usted mismo, que se configura automáticamente linuxsolo cuando inicia sesión en una consola virtual (en Ubuntu está configurado xtermen aplicaciones de consola, pero esto puede variar entre los sistemas operativos). Verifique el contenido de TERM en las diversas aplicaciones que está utilizando y configúrelo según corresponda.

teppic
fuente
Nunca he estado en la posición de tener tres respuestas perfectas en stackexchange.
John Baber-Lucero