Home / LinuxUser / 2000 / 11 / Hardcore Linux

Newsletter abonnieren

Lies uns auf...

Folge LinuxCommunity auf Twitter

Top-Beiträge

War doch klar...
(243 Punkte bei 15 Stimmen)
Re: War doch klar...
(179 Punkte bei 5 Stimmen)
Re: Skype für 64-Bit-Prozessor u. Suse 12.1
(161 Punkte bei 4 Stimmen)
Kubuntu verliert Finanzierung
(130 Punkte bei 4 Stimmen)
Offen fürs Geschäft
(80 Punkte bei 4 Stimmen)

Heftarchiv

LinuxUser Heftarchiv

EasyLinux Heftarchiv

Ubuntu User Heftarchiv

Ubuntu User Heftarchiv

Partner-Links:

Shopping
Topsuche
 
Yatego Deutschlands größte Shoppingmall. 10000 Shops,
3.5 Mio Artikel. Alle Bestseller, Servertechnik und Technik Themenwelten.

Notebooks und Netzwerkhardware bei Mercateo günstig kaufen.
Internet Telefonie mit VoIP Telefonen von Gigaset
Das B2B Portal www.Linx.de informiert über Produkte und Dienstleistungen.
Günstige Digitalkameras finden Sie im Preisvergleich.

Die Bash, das unbekannte Wesen

Hardcore Linux

01.11.2000 Dieser Teil der Serie über die Bash stellt die Grundlagen für die Arbeit mit mehreren und verketteten Befehlen auf der Bash zusammen.

Ein Überblick

Kleine Programme, die auf einer Shell ausgeführt werden, heißen "Befehle" ("Commands"). So unterschiedlich ihre Funktionen auch sind, weisen sie doch gewolltermaßen und prinzipiell viele Ähnlichkeiten auf. So verfügt jeder Befehl über drei Ein- und Ausgänge, die für bestimmte festgelegte Aufgaben eingesetzt werden, die Standardkanäle. Befehle können in den Befehlszeilen einzeln, zu mehreren oder in verketteter Form eingegeben werden. Alle Formen haben bestimmte Vorteile und Eigenheiten.

Befehle und Standardkanäle

Abbildung 1: Datenfluss und Standardkanäle

Einer der Befehlskanäle stellt dem Befehl ein Tor für Eingaben zur Verfügung. Über ihn liest ein Programm Daten aus einer Datei oder einer Pipe (siehe unten) ein. Dieser Kanal wird daher als "Standardeingabe" (standard input) bezeichnet. Analog gibt es einen Ausgabekanal, die "Standardausgabe" (standard output). Der dritte Kanal ("Standardfehlerausgabe" – standard error) hat eine besondere Funktion: über ihn werden Fehlermeldungen, die der Befehl generiert, ausgegeben. Diese Fehlermeldungen haben unter Linux eine wichtige Funktion, da sie oft Hinweise enthalten, wie ein Problem zu lösen ist. Ein Beispiel: Mit den Befehl grep werden Texte nach bestimmten Zeichenketten durchsucht. Der Befehl muss dazu die Textdaten aus den Dateien erhalten (via Standardeingabekanal). Zeilen, die den entsprechenden Text enthalten, werden ausgegeben (via Standardausgabekanal) und in Fällen, wo ein Problem auftritt – weil etwa eine nicht lesbare Datei angegeben wurde – muss der Befehl dies über die Standardfehlerausgabe melden. Abbildung 1 verdeutlicht die Zusammenhänge. Die Zahlen "0", "1" und "2" dienen zur Kennzeichnung dieser Kanäle und werden als Datei-Descriptoren bezeichnet. In der Befehlszeile sieht der Anwender nur wenig von diesen Zusammenhängen:

$> grep muster textdatei*
grep: textdatei: Ist ein Verzeichnis
textdatei1.tex: ein Beispiel "muster"
...

Dieses Beispiel zeigt verschiedene Aspekte auf: Zum einen verwenden viele Befehle (wie auch grep) einige Argumente in der Befehlszeile für Eingaben. Derartige Befehle verwenden meistens das Terminal zur Eingabe, wenn keine entsprechende Eingabedatei beim Befehlsaufruf angegeben wurde.

$> grep geh
Das Lesen vom Terminal[RETURN]
geht so!
geht so!
[Strg-d]

("geht" wird als Suchmuster interpretiert. Mit [Strg][d] wird das Dateiende gekennzeichnet und so die Eingabe beendet.)

Zum anderen wird in dem Beispiel oben das letzte Argument in der Befehlszeile (textdatei*) als Name der Eingabedatei interpretiert. Da der Dateiname ein Sternchen enthält, ersetzt die Shell ihn durch alle passenden Dateinamen (beispielsweise textdatei1.tex, textdatei2.tex, …). Da es auch ein Verzeichnis mit dem Namen "textdatei" gibt, versucht grep zunächst auf dieses zuzugreifen, ein Versuch, der zum Scheitern verurteilt ist und die in der ersten Ausgabezeile dargestellte Fehlermeldung verursacht. Im folgenden sieht man, dass die Textausgaben (also die Zeilen, auf die das angegebene Muster zutraf) auch auf dem Terminal erscheinen. Grund für dieses Verhalten ist die Tatsache, dass normalerweise sowohl Standardausgabe- als auch Standardfehlerkanal auf das Terminal geleitet werden. Das muss aber nicht so sein. Über die Datei-Descriptoren sind beide Kanäle getrennt zugänglich.

Einem Freund empfehlen    Druckansicht Bookmark and Share
Kommentare

963 Hits
Wertung: 0 Punkte (0 Stimmen)

Schlecht Gut

Infos zur Publikation

Infos zur Publikation

LinuxUser 03/2012

Aktuelle Ausgabe kaufen:

Heft bestellen Heft als PDF kaufen

LinuxUser erscheint monatlich und kostet in der Nomedia-Ausgabe EUR 5,50 und mit DVD EUR 8,50. Weitere Informationen zum Heft finden Sie auf der LinuxUser-Homepage.

Im LinuxUser-Probeabo erhalten Sie drei Ausgaben für 3 Euro. Das Jahresabo (ab EUR 56,10) können Sie im LNM-Shop bestellen.

Tipp der Woche

Duden Korrektor unter 64-Bit
Duden Korrektor unter 64-Bit
Tim Schürmann, 06.02.2012 10:36, 0 Kommentare

Der Duden Korrektor bietet eine äußerst nützliche Rechtschreib- und Grammatikkorrektur für LibreOffice und bringt in der aktuellen Version 8 e...

Aktuelle Fragen

Ubuntu 11.10 Compiz 3D Cube flackern
Moritz Obenauer, 12.02.2012 12:25, 0 Antworten
Hallo! Ich habe Ubuntu 11.10 mit Unity und den Compiz 3D Cube ein gerichtet. Er funktioniert...
Suse 12.1 Bootvorgang bleibt seit Update stehen
Wimpy *, 12.02.2012 09:22, 2 Antworten
Seit Update auf Kernel 3.1.9-1.4-desktop i686 bleibt der Bootvorgang stehen. Es erscheint der gr...
N24 Stick (Huawei E173) und Ubuntu 11.04
Patrick Obenauer, 11.02.2012 11:54, 1 Antworten
Hallo zusammen! Ich benutze einen alten Laptop, der mit Ubuntu 11.04 flott und problemlos läuft....
Wie kann man beim Einsatz von Compiz die Fenster-Dekoration einstellen?
GoaSkin , 10.02.2012 20:12, 0 Antworten
Hallo, ich nutze Linux Mint mit dem Gnome-Derivat Mate. Da die Distribution Compiz nicht autom...
rndc reload zone - failed bad zone
Ludwig jun. B., 06.02.2012 16:08, 2 Antworten
Schönen guten Tag, ich habe folgendes Problem. Immer wenn ich folgendes Kommando ausführen bek...