next up previous contents index
Next: Eingebaute Shellkommandos Up: bash Previous: Eingabeaufforderung

Wenn alles getan ist

Wenn die Shell alle Ersetzungen in der Kommandozeile vorgenommen und alle Umleitungen vorbereitet hat, ist der Zeitpunkt gekommen, auf den der Anwender die ganze Zeit gewartet hat. Die Shell versucht, das Kommando auszuführen. Dazu muß sie es aber erst lokalisieren. Das erste passende Kommando wird ausgeführt.

Als Kommandoname wird immer das erste Wort eines einfachen Kommandos erkannt. Ein Kommandoname kann mit Pfadnamen in einem Verzeichnis (absolut oder relativ) angegeben werden. Die Shell erkennt das an (mindestens) einem Slash `/' im Kommandonamen. Wenn kein Verzeichnis angegeben ist, versucht die Shell selbst, das Kommando zu finden. Dazu wird der Kommandoname zuerst in der Hashtabelle (-> Seite gif) gesucht, dann wird er mit den Synonymen, mit den Scriptfunktionen und schließlich mit den Shellfunktionen verglichen.

Wenn auf diese Weise kein Programm dieses Namens gefunden wird, werden alle in der PATH-Umgebungsvariablen aufgeführten Verzeichnisse nach einer ausführbaren Datei dieses Namens durchsucht. Wenn auch hier kein passendes Kommando gefunden wird, gibt die Shell eine Fehlermeldung aus.  

Wenn die Shell das Kommando lokalisieren kann, wird ein Argumentvektor zusammengestellt. Die Positionsvariable 0 wird mit dem vollständigen Pfadnamen des Kommandos belegt, die übrigen Argumente (wenn welche vorhanden sind) werden in den folgenden Positionsparametern gespeichert und in der Laufzeitumgebung des Kommandos, dem Environment, gespeichert. Dieser Argumentvektor kann dann beispielsweise in einem C-Programm durch die Funktion main(int argc, char* argv) übernommen und später ausgewertet werden.

Wenn die Ausführung fehlschlägt, weil die Datei keine ausführbaren Binärdaten enthält, versucht die bash automatisch, diese Datei als Shellscript auszuführen. Dazu wird eine neue Shell (Subshell) erzeugt, die wie bei einem Aufruf in der Kommandozeile neu (durch die in der ENV-Umgebungsvariablen angegebene Datei) initialisiert wird.

Häufig beginnen Scriptprogramme mit den Zeichen ` #!', gefolgt von einem Programmnamen. An dieser Konstruktion erkennt der Kernel selbst, daß es sich nicht um ein Binärprogramm handelt.gif Beispielsweise leitet die Zeile #! /bin/bash -e ein bash-Shellscript ein, das sofort abbricht, wenn eines der aufgerufenen Kommandos einen Status != Null liefert.



next up previous contents index
Next: Eingebaute Shellkommandos Up: bash Previous: Eingabeaufforderung



Linux Anwenderhandbuch -- Copyright 1993, 1994, 1995 S. Hetze, D. Hohndel, O. Kirch, M. Müller