12.5Kommandos ausführen

Üblicherweise starten Sie Kommandos einfach durch die Eingabe des Kommandonamens. Daneben gibt es aber einige Möglichkeiten, um mehrere Kommandos hintereinander auszuführen (siehe Tabelle 12.3).

Kommando

Funktion

kommando1; kommando2

führt die Kommandos nacheinander aus.

kommando1 && kommando2

führt Kommando 2 aus, wenn Kommando 1 erfolgreich war.

kommando1 || kommando2

führt Kommando 2 aus, wenn Kommando 1 einen Fehler liefert.

kommando &

startet das Kommando im Hintergrund.

kommando1 & kommando2

startet Kommando 1 im Hintergrund, Kommando 2 im Vordergrund.

(kommando1 ; kommando2)

führt beide Kommandos in der gleichen Shell aus.

Tabelle 12.3Kommandoausführung

Das wichtigste und am häufigsten benötigte Sonderzeichen ist &. Wenn es am Ende der Kommandozeile eingegeben wird, startet bash dieses Programm im Hintergrund. Das ist vor allem bei zeitaufwendigen Programmen sinnvoll, weil sofort weitergearbeitet werden kann.

user$ find / -name '*sh' > ergebnis & [1] 3345

Das obige Kommando durchsucht das gesamte Dateisystem nach Dateien, die mit den Buchstaben »sh« enden. Die Liste der Dateien wird in die Datei ergebnis geschrieben. Da das Kommando im Hintergrund ausgeführt wird, kann sofort weitergearbeitet werden. Die Ausgabe [1] 3345 bedeutet, dass der Hintergrundprozess die PID-Nummer 3345 hat. PID steht dabei für »Prozessidentifikation«. Die PID-Nummer ist dann von Interesse, wenn der Prozess vorzeitig durch kill beendet werden soll. Die Nummer in eckigen Klammern gibt die Nummer des Hintergrundprozesses an, der in bash gestartet wurde, und ist im Regelfall nicht von Interesse.

Wenn Sie beim Start eines Kommandos das &-Zeichen vergessen, brauchen Sie weder zu warten noch müssen Sie das Programm mit (Strg)+(C) gewaltsam stoppen. Vielmehr sollten Sie das Programm mit (Strg)+(Z) unterbrechen und mit bg als Hintergrundprozess fortsetzen.

Nach dem &-Zeichen kann auch ein weiteres Kommando angegeben werden. In diesem Fall wird das erste Kommando im Hintergrund, das zweite dagegen im Vordergrund ausgeführt. Im folgenden Beispiel wird nochmals das obige find-Kommando im Hintergrund gestartet. Gleichzeitig wird aber mit ls das aktuelle Inhaltsverzeichnis ausgegeben:

user$ find / -name '*sh' > ergebnis & ls

Wenn statt des &-Zeichens ein Semikolon angegeben wird, führt bash die Kommandos nacheinander und im Vordergrund aus:

user$ ls; date

Das obige Kommando zeigt zuerst das aktuelle Inhaltsverzeichnis an und gibt anschließend das aktuelle Datum aus. Wenn die Gesamtheit dieser Informationen mit > in eine Datei umgeleitet werden soll, müssen beide Kommandos in runde Klammern gestellt werden. Dadurch werden beide Kommandos von ein und derselben Shell ausgeführt.

user$ (ls; date) > inhalt

In der Datei inhalt befinden sich nun die von ls erstellte Dateiliste sowie das mit date ermittelte aktuelle Datum. Die runden Klammern bewirken, dass die beiden Kommandos innerhalb derselben Shell ausgeführt werden und daher auch ein gemeinsames Ergebnis liefern. (Normalerweise wird bei der Ausführung jedes Kommandos eine neue Shell gestartet.)

Mit den Zeichenkombinationen && und || können Sie Kommandos bedingt ausführen, d.h. in Abhängigkeit vom Ergebnis eines anderen Kommandos:

user$ kommando1 && kommando2

führt Kommando 1 aus. Nur wenn dieses Kommando erfolgreich war (kein Fehler, Rückgabewert 0), wird anschließend auch Kommando 2 ausgeführt.

user$ kommando1 || kommando2

führt Kommando 1 aus. Nur wenn bei der Ausführung dieses Kommandos ein Fehler auftritt (Rückgabewert ungleich 0), wird anschließend auch Kommando 2 ausgeführt.

Weitere Möglichkeiten zur Bildung von Bedingungen und Verzweigungen bietet das Shell-Kommando if, das allerdings nur für die Shell-Programmierung von Interesse ist.