Wie kann ich feststellen, dass das Bash-Skript auf der „Konsole“ und nicht in einer Remote-Terminalsitzung ausgeführt wird? Ich würde meinen, es gibt eine Möglichkeit festzustellen, ob das Skript auf /dev/console ausgeführt wird? Oder bin ich auf dem Holzweg (binär)?
Antwort1
Das klingt nach einer möglichenXY-Problem.
Ein alter Unix-Befehl tty
kann Ihnen sagen, auf welchem Gerät sich Ihr Terminal befindet. So etwas wie das hier könnte also das bewirken, wonach Sie suchen:
if [ $(tty) = "/dev/console" ]; then
echo "Yes, I am on the console."
else
echo "No, I am not on the console."
fi
Jedoch,Ein Programm, das in einer Anmeldesitzung in einer virtuellen Linux-Konsole ausgeführt wird, könnte stattdessen /dev/tty1
oder ähnlich sehen. Wenn eine serielle Konsole verwendet wird, sehen Sie möglicherweise /dev/ttyS0
oder ein anderes serielles Port-Gerät. Ein Literal könnte nur dann angezeigt /dev/console
werden, wenn Sie im Notfall-Shell-/Einzelbenutzermodus arbeiten. Zu wissen, welche Geräte gültige Konsolen sein könnten, ist nicht trivial; das ist einer der Gründe, warum /etc/securetty
es existiert und vom Systemadministrator konfiguriert werden kann.
(Wenn Sie die seriellen Ports ablehnen, versucht ein Systemadministrator irgendwo, eine serielle LAN-Verbindung zu verwenden, um einsehrdas Remote-System könnte Sie hassen.)
Wenn ein Prozess oder Skript als Dienst ausgeführt wird, systemd
verfügt es möglicherweise überhaupt nicht über ein TTY im herkömmlichen Sinn. Stattdessen werden seine Standardausgabe und Standardfehlerausgabe an systemd
die Journalfunktion von angeschlossen, die es beim Systemstart je nach Konfiguration des Dienstes möglicherweise an die Konsole weitergibt oder nicht.
Bitte bearbeiten Sie Ihre Frage, um Folgendes anzugeben:WarumSie möchten wissen, ob Sie eine „Konsole“ verwenden oder nicht, damit wir versuchen können, eine Möglichkeit zu finden, Ihre Frage in einem Sinne zu beantworten, der Ihrem tatsächlichen Bedarf entspricht.
Antwort2
Wenn Sie ausführen ps axu
, suchen Sie in der TTY-Spalte nach der Root-„Konsole“, die der Prozess verwendet.
Jeder Prozess hat einen übergeordneten Prozess, der bis zum Root-Init-Prozess reicht.
Antwort3
Erkunden Sie mit diff
die Ergebnisse von env | sort
in den beiden Umgebungen. $DISPLAY
ist eine zum Überprüfen.
Lesen Sie auch man isatty
.