Wie kann festgestellt werden, dass das Bash-Skript auf der „Konsole“ und nicht in einer Remote-Terminalsitzung ausgeführt wird?

Wie kann festgestellt werden, dass das Bash-Skript auf der „Konsole“ und nicht in einer Remote-Terminalsitzung ausgeführt wird?

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 ttykann 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/tty1oder ähnlich sehen. Wenn eine serielle Konsole verwendet wird, sehen Sie möglicherweise /dev/ttyS0oder ein anderes serielles Port-Gerät. Ein Literal könnte nur dann angezeigt /dev/consolewerden, 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/securettyes 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, systemdverfügt es möglicherweise überhaupt nicht über ein TTY im herkömmlichen Sinn. Stattdessen werden seine Standardausgabe und Standardfehlerausgabe an systemddie 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 diffdie Ergebnisse von env | sortin den beiden Umgebungen. $DISPLAYist eine zum Überprüfen.

Lesen Sie auch man isatty.

verwandte Informationen