AA_PO-23942_stevanovicigor-123RF.jpg

© stevanovicigor, 123RF

Ein-/Ausgabeumleitung

Datenfluss

Die Shell hilft, wenn es um kniffelige Probleme geht. Genügen die Fähigkeiten eines einzelnen Tools nicht Ihren Wünschen, verketten Sie einfach mehrere Kommandos.

Auf gute Zusammenarbeit – wer Shell-Befehle miteinander kombiniert, spielt die ganze Stärke der Kommandozeile aus. Dazu gehört nicht nur das Verketten einzelner Programme, sondern auch das Weiterleiten der Ausgaben: Scrollen die Informationen zu schnell über den Bildschirm, leiten Sie diese einfach in eine Datei um oder zeigen Sie seitenweise an.

Gut kombiniert

Mit wenigen Handgriffen verknüpfen Sie in der Bash einzelne Befehle miteinander. Anstelle der Sequenz aus den Zeilen 1 bis 3 von Listing 1 kombinieren Sie die einzelnen Arbeitsschritte und teilen dem Interpreter über das Semikolon mit, dass er alle Befehle direkt hintereinander ausführen soll (Zeile 4).

Listing 1

$ mkdir Ordner
$ cd Ordner
$ cp ../Ordner2/* .
$ mkdir Ordner; cd Ordner; cp ../Ordner2/* .

Noch mehr Kontrolle erhalten Sie, indem Sie der Bash eine Bedingung stellen. So ist es beispielsweise möglich, einen zweiten (oder dritten oder n-ten) Befehl nur dann auszuführen, wenn ein anderes Kommando erfolgreich oder nicht erfolgreich war.

Um beispielsweise eine bestimmte Datei nur dann zu löschen, wenn sie auch tatsächlich vorhanden ist, stellen Sie dem Kommando Rm einen einfachen Test voran:

$ test -w Datei && rm Datei

Das gleichnamige Programm Test sieht in diesem Fall nach, ob die Datei existiert und beschrieben werden darf (Parameter -w). Nur, wenn das der Fall ist, löscht Rm das File.

Bauen Sie häufig Software aus den Quellen und setzen dabei den Dreierschritt ./configure; make; sudo make install ein, können Sie alle drei Befehle miteinander kombinieren und durch && sicherstellen, dass jeder folgende Befehl nur weitermacht, wenn der Vorgänger keine Fehler produziert hat:

$ ./configure && make && sudo make install

Neben der Option -w hat das Kommando Test noch einige weitere praktische Schalter zu bieten. So sehen Sie zum Beispiel mit -d nach, ob ein Verzeichnis schon existiert, und erstellen es nur dann, wenn das nicht der Fall ist:

$ test -d Ordner || mkdir Ordner

Dabei übernehmen die zwei Pipe-Zeichen zwischen den Befehlen die Funktion eines logischen Oder.

Kanalsystem

Für die Ein- und Ausgabe von Befehlen auf der Shell gibt es drei sogenannte Kanäle: Programme lesen Ihre Daten von der Standardeingabe (stdin, Kanal 0) oder aus einer Datei. Seine Ausgaben schreibt das Programm auf die Standardausgabe (stdout, Kanal 1). Fehlermeldungen schließlich landen auf der Standardfehlerausgabe (stderr, Kanal 2):

Befehl < Eingabe > Ausgabe 2> Fehler

Die Operatoren < und > verraten dabei die Richtung: Erfolgt die Standardeingabe nicht über die Tastatur, dann sorgt < dafür, dass der Befehl sie beispielsweise aus einer Datei einliest. Um hingegen die Ausgabe eines Kommandos in eine Datei umzuleiten, dient der Operator >.

Die Fehlerausgabe erreichen Sie ebenfalls über >. Allerdings spezifizieren Sie hier den Kanal durch Voranstellen des File Descriptors (2>). Die Tabelle "Shell-Umleitungen" zeigt eine Übersicht der gebräuchlichsten Umleitungsszenarien, und die folgenden Abschnitte zeigen detaillierte Anwendungsbeispiele.

Shell-Umleitungen

Kanal Kommando Ergebnis
1 (stdout) Befehl > Datei schreibt die Standardausgabe von Befehl in Datei
1 (stdout) Befehl >> Datei hängt die Standardausgabe von Befehl an Datei an
2 (stderr) Befehl 2> Datei lenkt die Standardfehlerausgabe von Befehl in Datei um
2 (stderr) Befehl 2>> Datei hängt die Standardfehlerausgabe von Befehl an Datei an
1 und 2 (stdout, stderr) Befehl > Datei 2>&1 schreibt Standardausgabe und Standardfehlerausgabe von Befehl in dieselbe Datei
1 und 2 (stdout, stderr) Befehl > Datei 2> Datei2 Standardausgabe von Befehl landet in Datei, die Standardfehlerausgabe in Datei2
0 (stdin) Befehl < Datei leitet Datei in Standardeingabe von Befehl um

Diesen Artikel als PDF kaufen

Express-Kauf als PDF

Umfang: 3 Heftseiten

Preis € 0,99
(inkl. 19% MwSt.)

LinuxCommunity kaufen

Einzelne Ausgabe
 
Abonnements
 
TABLET & SMARTPHONE APPS
Bald erhältlich
Get it on Google Play

Deutschland

Ähnliche Artikel

  • Datenfluss
    Das Arbeiten auf der Shell hat viele Vorteile – abgesehen davon, dass es oft schneller geht, ein Kommando einzutippen als ein grafisches Programm zu bemühen, eröffnen Pipelines, Umleitungen und Kommandoketten zusätzliche Möglichkeiten.
  • Zu Befehl: Kanäle, Pipes und Tee
    Mit wenigen Handgriffen leiten Sie auf der Kommandozeile Ein- und Ausgaben von Befehlen um und kombinieren Kommandos. Wir stellen die benötigten Bash-Operatoren vor und zeigen, wie Sie mit dem Programm tee noch einen Zwischenschritt einlegen.
  • Datenbaustelle
    Die Linux-Kommandozeile zeigt ihre Stärken gerade beim Kombinieren vieler kleiner Tools – hier gilt der klassische Satz: Das Ganze ist mehr als die Summe seiner Teile. Umleitungen und Pipes sind oft mit am Werk, wenn Kommandos zusammenwirken.
  • Zu Befehl: head, tail, cat
    Kleine Tools wie head, tail und cat zeigen den Inhalt von Textdateien an. Sie erfüllen jedoch alle eine spezielle Funktion, die andere Unix-Kommandos nicht bieten.
  • Einführung in die Shell – Teil 3
    In den ersten zwei Teilen der Shell-Einführung [1,2] haben wir Sie mit den Grundlagen der Shell vertraut gemacht. Jetzt stellen wir einige Spezialtools vor, mit denen die Shell besonders leistungsfähig wird – darunter "xargs".
Kommentare

Infos zur Publikation

LU 12/2017: Perfekte Videos

Digitale Ausgabe: Preis € 5,95
(inkl. 19% MwSt.)

LinuxUser erscheint monatlich und kostet 5,95 Euro (mit DVD 8,50 Euro). Weitere Infos zum Heft finden Sie auf der Homepage.

Das Jahresabo kostet ab 86,70 Euro. Details dazu finden Sie im Computec-Shop. Im Probeabo erhalten Sie zudem drei Ausgaben zum reduzierten Preis.

Bei Google Play finden Sie digitale Ausgaben für Tablet & Smartphone.

HINWEIS ZU PAYPAL: Die Zahlung ist ohne eigenes Paypal-Konto ganz einfach per Kreditkarte oder Lastschrift möglich!

Stellenmarkt

Aktuelle Fragen

Fernstudium Informatik
Joe Cole, 12.12.2017 10:36, 0 Antworten
Hallo! habe früher als ich 13 Jahre angefangen mit HTML und später Java zu programmieren. Weit...
Installation Linux mint auf stick
Reiner Schulz, 10.12.2017 17:34, 0 Antworten
Hallo, ich hab ein ISO-image mit Linux Mint auf einem Stick untergebracht Jetzt kann ich auch...
Canon Maxify 2750 oder ähnlicher Drucker
Hannes Richert, 05.12.2017 20:14, 4 Antworten
Hallo, leider hat Canon mich weiterverwiesen, weil sie Linux nicht supporten.. deshalb hier die...
Ubuntu Server
Steffen Seidler, 05.12.2017 12:10, 1 Antworten
Hallo! Hat jemand eine gute Anleitung für mich, wie ich Ubuntu Server einrichte? Habe bisher...
Tinte sparen bei neuem Drucker
Lars Schmitt, 30.11.2017 17:43, 2 Antworten
Hi Leute, ich habe mir Anfang diesen Monats einen Tintenstrahldrucker angeschafft, der auch su...