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
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
Antworten:
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
Wenn Sie interaktive von nicht interaktiven Shells unterscheiden test
mö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
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 TERM
Umgebungsvariable nicht selbst geändert haben. Diese wird automatisch linux
nur festgelegt, wenn Sie sich bei einer virtuellen Konsole anmelden (unter Ubuntu ist sie xterm
in 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.