eine Folge von Weiterleitungen verstehen

8

Wenn mehrere Umleitungen zusammen verwendet werden, macht es dann einen Unterschied, ihre Reihenfolge zu ändern?

Wie soll man die Bedeutung ihrer Ordnung verstehen? Ist der verkettete Umleitungskanal so aufgebaut, dass er die Umleitungen von links nach rechts oder von rechts nach links liest?

Zum Beispiel

command 2>&1 > somefile

command > somefile 2>&1

Danke und Grüße!

Tim
quelle

Antworten:

7

Ja, die Reihenfolge macht einen Unterschied und sie sollten von links nach rechts gelesen werden.

command 2>&1 >somefilebedeutet, stderr (2) zum aktuellen Ziel von stdout (dem Terminal) umzuleiten. Ändern Sie dann stdout, um zu gehen somefile. Also geht stderr zum Terminal und stdout geht zu einer Datei.

command >somefile 2>&1bedeutet, stdout an somefileund dann stderr an dasselbe Ziel wie stdout (die Datei) umzuleiten. Also gehen sowohl stderr als auch stdout zu somefile.

Dies wird in Abschnitt 3.6 des Bash-Handbuchs erläutert : Weiterleitungen .

cjm
quelle
1
man bash 

sagt:

Umleitung Bevor ein Befehl ausgeführt wird, können seine Eingabe und Ausgabe unter Verwendung einer von der Shell interpretierten speziellen Notation umgeleitet werden. Die Umleitung kann auch zum Öffnen und Schließen von Dateien für die aktuelle Shell-Ausführungsumgebung verwendet werden. Die folgenden Umleitungsoperatoren können vor oder innerhalb eines einfachen Befehls erscheinen oder einem Befehl folgen. Weiterleitungen werden in der Reihenfolge verarbeitet, in der sie angezeigt werden, von links nach rechts.

und

Beachten Sie, dass die Reihenfolge der Umleitungen von Bedeutung ist. Zum Beispiel der Befehl

ls > dirlist 2>&1

Leitet sowohl die Standardausgabe als auch den Standardfehler während des Befehls an die Dateiverzeichnisliste

ls 2>&1 > dirlist

Leitet nur die Standardausgabe in die Dateiliste, da der Standardfehler von der Standardausgabe dupliziert wurde, bevor die Standardausgabe in die Verzeichnisliste umgeleitet wurde.

Benutzer unbekannt
quelle