Wie kann mein Skript erkennen, wann ich mich in einer virtuellen Konsole im Vergleich zu einem xterm befinde?

11

Einige meiner Skripte (Ändern der Keymap, Hinzufügen öffentlicher Schlüssel) müssen sich in einer virtuellen Konsole anders verhalten als in einem xterm. Wofür ist der wahre Code?

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

Antworten:

6

Für mich klingt es so, als ob Sie prüfen möchten, ob es einen X-Server gibt, zu dem eine Verbindung hergestellt werden kann.

Etwas wie:

if [ -n "$DISPLAY" ]; then
  : X
else
  : no X
fi
Stéphane Chazelas
quelle
1
Ich war noch nie in der Lage, drei perfekte Antworten auf Stackexchange zu haben.
John Baber-Lucero
9

Wenn Sie interaktive von nicht interaktiven Shells unterscheiden testmöchten , verwenden Sie die integrierte Unterstützung zum Erkennen (nicht sicher, ob ksh sie hat, aber die Binärdatei von coreutils unterstützt sie auch):

test -t 0 # will return 0 for interactive shells

Wenn Sie wirklich gemeint haben, ob Sie sich auf einem tty / pty / pts oder etwas anderem befinden, analysieren Sie die Ausgabe von tty:

$ tty # konsole
/dev/pts/4
$ tty # virtual terminal
/dev/tty2
lynxlynxlynx
quelle
Ich war noch nie in der Lage, drei perfekte Antworten auf Stackexchange zu haben.
John Baber-Lucero
7

Dies hängt vom Betriebssystem ab. Für Linux können Sie Folgendes tun:

#!/bin/ksh

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

Dies setzt natürlich voraus, dass Sie die TERMUmgebungsvariable nicht selbst geändert haben. Diese wird automatisch linuxnur festgelegt, wenn Sie sich bei einer virtuellen Konsole anmelden (unter Ubuntu ist sie xtermin Konsolenanwendungen festgelegt, dies kann jedoch zwischen den Betriebssystemen variieren). Überprüfen Sie den Inhalt von TERM in den verschiedenen Anwendungen, die Sie verwenden, und stellen Sie ihn entsprechend ein.

teppic
quelle
Ich war noch nie in der Lage, drei perfekte Antworten auf Stackexchange zu haben.
John Baber-Lucero