Come può sapere il mio script quando sono in una console virtuale rispetto a un xterm?


11

Alcuni dei miei script (modifica della mappa dei tasti, aggiunta della chiave pubblica) devono agire in modo diverso in una console virtuale rispetto a un xterm. A cosa serve il vero codice

#!/bin/ksh
if [[ in_a_virtual_console ]]; then
...
else
...
fi

Risposte:


6

Mi sembra che tu voglia verificare se esiste o meno un server X a cui connettersi.

Qualcosa di simile a:

if [ -n "$DISPLAY" ]; then
  : X
else
  : no X
fi

1
Non sono mai stato in grado di avere tre risposte perfette su stackexchange.
John Baber-Lucero,

9

Se intendevi distinguere le shell interattive da quelle non interattive, usa testil supporto integrato per rilevarlo (non sono sicuro che ksh lo abbia, ma anche il binario da coreutils lo supporta):

test -t 0 # will return 0 for interactive shells

Se intendevi davvero se sei su un tty / pty / pts o qualcos'altro, analizza l'output di tty:

$ tty # konsole
/dev/pts/4
$ tty # virtual terminal
/dev/tty2

Non sono mai stato in grado di avere tre risposte perfette su stackexchange.
John Baber-Lucero,

7

Questo dipenderà dal sistema operativo. Per Linux, puoi farlo:

#!/bin/ksh

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

Questo, ovviamente, presuppone che tu non abbia modificato TERMtu stesso la variabile d'ambiente, che viene automaticamente impostata linuxsolo quando accedi a una console virtuale (in Ubuntu è impostata su xtermnelle applicazioni console, ma ciò può variare tra i sistemi operativi). Controlla il contenuto di TERM nelle varie applicazioni che stai utilizzando e impostalo come appropriato.


Non sono mai stato in grado di avere tre risposte perfette su stackexchange.
John Baber-Lucero,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.