staging.inyokaproject.org

Modi

Dieser Artikel wurde für die folgenden Ubuntu-Versionen getestet:

Dieser Artikel ist größtenteils für alle Ubuntu-Versionen gültig.

Zum Verständnis dieses Artikels sind folgende Seiten hilfreich:

  1. ⚓︎ Terminal - einen Terminal öffnen

Eine Shell (z.B. Bash, Dash, sh usw.) kann in verschiedenen Modi ausgeführt werden. Jede Shell kann:

sowie

sein.

Daraus ergeben sich insgesamt die vier Kombinationen: interaktive Loginshell, nicht-interaktive Loginshell, interaktive Nicht-Loginshell, nicht-interaktive Nicht-Loginshell.

Die Unterscheidung zwischen den vier Modi einer Shell ist insofern wichtig, als dass je nach Modus verschiedene Kofigurationsdateien eingelesen werden und damit je nach Modus unterschiedliche bzw. unterschiedliche viele Umgebungsvariablen standardmäßig vorhanden sind.

Öffnet man ein Terminal in einer Desktopumgebung, befindet man sich in einer interaktiven Nicht-Loginshell. Das ist also der Shelltyp, den man als "normaler" Desktopbenutzer am häufigsten nutzt.

interaktive / nicht-interaktive Shell

Eine interaktive Shell ist mit einem Terminal (Tastatur, Bildschirm) verbunden, über welches sie von einem Benutzer eingegebene Befehle entgegen nimmt und die Ergebnisse der ausgeführten Kommandos ausgibt. Beispiele für den Aufruf von interaktiven Shells sind:

  • ein Terminal in der Desktopumgebung öffnen

  • eine virtuelle Konsole nach dem Systemstart aufrufen und sich dort einloggen

  • sich über SSH an einem anderen System anmelden

Eine nicht-interaktive Shell hat keinen direkten Kontakt zu einem Benutzer. Sie läuft im Hintergrund, ohne Interaktion mit dem Nutzer. Beispiele für nicht-interaktive Shells sind:

  • Shells, in denen während des Bootvorgangs Skripte ausgeführt werden

  • Shells, in denen man einen Befehl per SSH ausführt, wie z.B. ssh NUTZER@IP_DES_RECHNERS '<BEFEHL>'

Prüfen auf interaktive Shell

Um zu prüfen, ob man sich in einer interaktiven Shell befindet, kann folgender Befehl genutzt werden:[1]

echo $- 

Es werden die Flags der laufenden Shell ausgegeben. Ist in der Ausgabe ein kleines i enthalten, läuft die Shell interaktiv. Der Befehl funktioniert sowohl in der Bash, Dash als auch sh.

Login- / Nicht-Loginshell

Eine Loginshell kann man auf zwei Wegen erhalten

  • nach dem Anmelden landet in einer initialen Shell

  • man startet ein Shell mit der Option -l oder --login

Entgegen des Namens muss, um in eine Loginshell zu gelangen, nicht zwingend ein Loginvorgang notwendig sein.

Beispiele für eine Loginshell sind:

  • sich über SSH auf einem anderen System einloggen

  • eine virtuelle Konsole nach dem Systemstart aufrufen und sich dort einloggen

  • als ein anderes Nutzer aus einer laufenden Shell eine neue Shell starten, z.B. über su -l NUTZERNAME

  • Aufruf des Befehls bash -l oder dash -l

Beispiele für eine Nicht-Loginshell sind:

  • einen Terminal in der Desktopumgebung öffen

  • Shells, in denen während des Bootvorgangs Skript ausgeführt werden

  • Shells, in denen einen Befehl per SSH ausführt, wie z.B. ssh NUTZER@IP_DES_RECHNERS 'echo $SHELL'

Prüfen auf Loginshell

Um zu prüfen, ob man sich in einer initialen Loginshell oder Nicht-Loginshell befindet, führt man den folgenden Befehl aus[1]

echo $0 

Dabei wird ausgegeben, welche Shell man gerade verwendet (also Bash, Dash etc.). Beginnt die Ausgabe mit einem Minuszeichen -, gefolgt vom Shellnamen, befindet man sich in einer initialen Loginshell. Erscheint nur der Shellname, ist man in einer Nicht-Loginshell:

#Ausgabe für eine Loginshell:
-bash
#Augabe für eine Nicht-Loginshell:
bash

Startet man allerdings z.B. ein Bash-Shell mit der Option -l bzw. --login, erhält man auch die Ausgabe bash, also ohne führendes -. Um bei bei solch einer Bash zu prüfen, ob es sich um eine Loginshell handelt, kann der folgende Befehl verwendet werden:

shopt | grep login_shell 

Ausgabe:

#für eine Loginshell:
login_shell    	on
#für eine Nicht-Loginshell:
login_shell    	off

In Shellskripten kann man auch folgenden Code verwenden:

1
2
3
4
if [ -n "$loginshell" ]
  then
    echo "Loginshell"
fi

Beispiele für alle vier Kombinationen

Im folgenden einige Beispiele für alle vier mögliche Kombinationen:

Beispiele vor verschiedene Shellkombinationen
Loginshell Nicht-Loginshell
interaktive Shell • sich über SSH auf einem anderen System einloggen
• eine virtuelle Konsole nach dem Systemstart aufrufen und sich dort einloggen
• Starten der Shell mit bash -l oder dash -l
• einen Terminal in der Desktopumgebung öffnen
nicht-interaktive Shell • über SSH einen Befehle ausführen, z.B. ssh NUTZER@IP_DES_RECHNERS 'hostname' • Shells, in denen während des Bootvorgangs Skripte ausgeführt werden
• einen Befehl / Skript in einer anderen Shell ausführen: sh -C SKRIPT_ODER_BEFEHL

Diese Revision wurde am 24. Juli 2020 01:05 von chris34 erstellt.
Die folgenden Schlagworte wurden dem Artikel zugewiesen: Shell, System