dummies
 

Suchen und Finden

Titel

Autor/Verlag

Inhaltsverzeichnis

Nur ebooks mit Firmenlizenz anzeigen:

 

Bash kurz & gut

Karsten Günther

 

Verlag O'Reilly Verlag, 2014

ISBN 9783955617660 , 176 Seiten

3. Auflage

Format PDF, ePUB, OL

Kopierschutz frei

Geräte

9,99 EUR

Für Firmen: Nutzung über Internet und Intranet (ab 2 Exemplaren) freigegeben

Derzeit können über den Shop maximal 500 Exemplare bestellt werden. Benötigen Sie mehr Exemplare, nehmen Sie bitte Kontakt mit uns auf.


 

Kapitel 5. Umleitungen (Redirections)


Alle drei Standardkanäle, die voreingestellt mit dem kontrollierenden Terminal verbunden sind, und weitere Ein- bzw. Ausgabekanäle lassen sich mit Hilfe von Umleitungen oder Redirections mit anderen Kanälen oder Filedescriptoren verbinden.

Neue Kanäle erzeugen


Der eingebaute Befehl exec („Eingebaute Befehle, alphabetisch sortiert“) erlaubt das Bereitstellen und die Verwendung zusätzlicher Descriptoren. Eine Reihe von Redirection-Operatoren steuert in der Befehlszeile die Umleitungen. Tabelle 5.1 fasst sie zusammen. Ihnen kann eine Kanalnummer vorbzw. nachgestellt werden, um andere als die Standarddescriptoren zu adressieren. Die Standarddescriptoren sind:

  • Descriptor 0: Standardeingabekanal. Voreingestellt in der Tastatur verbunden, ließt Eingaben für Programme.

  • Descriptor 1: Standardausgabekanal. Voreingestellt mit dem Terminal verbunden, schreibt Ausgaben von Programmen.

  • Descriptor 2: Standardfehlerkanal. Oft mit dem Terminal verbunden, schreibt dort Fehlermeldungen und Warnungen.

Diese Descriptoren stehen immer zur Verfügung, die Bash verwendet sie voreingestellt. Eine Reihe von speziellen Dateinamen interpretiert die Bash als Filedescriptoren, wenn sie in einem Redirection-Kontext auftreten:

  • /dev/fd/Nummer: Erzeugt bzw. nutzt den Filedescriptor mit der angegebenen Nummer. Dupliziert ihn bei Bedarf.

  • /dev/stdin: dupliziert den Standardeingabekanal.

  • /dev/stdout: dupliziert den Standardausgabekanal.

  • /dev/stderr: dupliziert den Standardfehlerkanal.

  • /dev/tcp/Host/Port: Die Bash versucht (einen korrekten Host und Port vorausgesetzt), eine TCP-Verbindung zu dem Socket aufzubauen.

  • /dev/udp/Host/Port: Die Bash versucht eine UDP-Verbindung zu Host mit Port aufzubauen.

Mehrere Kanäle lassen sich verbinden, wobei die Reihenfolge eine entscheidende Rolle spielt: ...>file 2>&1 verbindet Standardfehlermit Standardausgabekanal und schreibt das Ergebnis nach file, während ... 2>&1 >file nur den Standardausgabekanal in file speichert.

Ab Version 4.0 kennt die Bash mit |& ein Synonym für 2>&1 |. Der Standardfehlerkanal wird in die Pipe umgeleitet.

Die meisten Redirection-Operatoren lassen sich für verschiedene Kanäle (n, m) anwenden. Die Angabe einer fehlerhaften Nummer (eines nicht existierenden Filedescriptors) führt zu einer Fehlermeldung vom Typ Redirection Error. In Verbindung mit & erzeugen die Operatoren neue Descriptoren als Kopie bestehender.

Der Unterschied zwischen > und >> besteht darin, dass > bestehende Files löscht und anschließend (leer) neu anlegt. >> hängt neue Inhalte an das Ende bereits bestehender Files an oder erstellt sie neu, falls sie bisher noch nicht existierten. Wichtig ist die Shelloption noclobber: Sie verhindert das Überschreiben bestehender Dateien. Da dies oft unhandlich in der Anwendung ist, ermöglicht der Operator >| auch bei aktivem noclobber (ebenfalls bei ungesetzter Option) bestehende Files zu überschreiben.

Das Öffnen eines Files gleichzeitig zum Lesen und Schreiben ist nur in Ausnahmefällen (bei Gerätedateien etwa) sinnvoll.

Ebenfalls ab Version 4 kennt die Bash diesen Operator:

&>> Datei verbindet Standardausgabe- und -fehlerkanal und leitet beide in die angegebene Datei.

Tabelle 5.1 Redirection-Operatoren; n, m sind wählbare Kanalnummern

Code

Funktion

<n

Eingabeumleitung, voreingestellt ist Kanal 0

n>

Ausgabeumleitung, voreingestellt ist Kanal 1

n& >file

Ausgabeumleitung von Kanal n in file

2>

Fehlerausgabeumleitung

2>&1

verbindet Standardausgabe- und -fehlerkanal

|&

Synonym für 2>&1, neu in Bash 4.0

n>&m

verbindet Kanal n mit m

>&file

Standardfehler- und -ausgabeumleitung in file

&>file

Standardfehler- und -ausgabeumleitung in file

n<file

file als Eingabekanal n

n>file

file als Ausgabekanal n, noclobber verhindert dies

n>|file

wie n>file, übersteuert noclobber

n>m

kopiert n als Ausgabekanal m

n<m

kopiert n als Eingabekanal m

n>>file

n als Ausgabekanal an file anhängen

&>>file

Standardfehler- und -ausgabe an file anhängen, neu in Bash 4.0

<&-

schließt den Standardeingabekanal

>&-

schließt den Standardausgabekanal

n<&-

schließt Eingabekanal n

n>&-

schließt Ausgabekanal n

n<>file

n als Ein- und Ausgabekanal mit file verbinden

<<[-]End

Here Document, durch End-String begrenzt

<<<End

Here String, durch End-String begrenzt

...|...

Pipe: verbindet linke Standardausgabe mit rechter Standardeingabe

Ab Version 4.1 expandiert die Bash links von Redirection-Operatoren Variablen und öffnet oder schließt (abhängig vom Operator) die vom Variableninhalt repräsentierten Filedescriptoren.

Ab Version 4.3: Mit dem neuen Feature {x}<word erlaubt die Bash Wörter in der Form {array[Index]} und kann dabei spezielle (Array-)Variablen verwenden, wie beispielsweise $BASH_XTRACEFD („Erweiterte Bash-Variablen“).

Die Bash hat dabei keinen Mechanismus, um sicherzustellen, dass x geöffnet bleibt.

Here Documents/Strings


Diese speziellen Umleitungen veranlassen die Shelleingaben so lange von der aktuellen Quelle zu lesen, bis eine End-Kennung erreicht ist. Dieser Kennung dürfen keine (unsichtbaren, nicht druckbaren oder sonstigen) Zeichen folgen, damit die Bash die Marke korrekt erkennt.

Innerhalb eines Here Documents/Strings führt die Bash keine Expandierungen oder Ersetzungen durch, sofern die End-Kennung eine Maskierung (Quotes, z.B. 'ENDE') aufweist.

Die Begrenzung selbst erkennt die Bash nach Entfernen der Maskierung(en), also in diesem Beispiel als ENDE.

Wenn die End-Kennung von keiner Maskierung umfasst wird, führt die Bash Parameter-, Befehls- und Prozessersetzungen und arithmetische Expandierungen innerhalb des Here...