3178 Stimmen

Was bedeutet in der Shell "2>&1"?

Wenn ich in einer Unix-Shell Folgendes kombinieren möchte stderr y stdout in die stdout stream für weitere Manipulationen kann ich am Ende meines Befehls folgendes anhängen:

2>&1

Wenn ich also Folgendes verwenden möchte head auf die Ausgabe von g++ kann ich so etwas tun:

g++ lots_of_errors 2>&1 | head

so dass ich nur die ersten paar Fehler sehen kann.

Ich habe immer Schwierigkeiten, mir das zu merken, und muss es immer wieder nachschlagen, vor allem, weil ich die Syntax dieses speziellen Tricks nicht ganz verstehe.

Kann jemand das aufschlüsseln und Zeichen für Zeichen erklären, was 2>&1 bedeutet?

63 Stimmen

@dbr Ich glaube nicht, dass es nur an der Bash liegt - ich glaube, es ist eine Sache der Bourne-Shell; daher sh, bash, ksh, ash, dash, usw.

8 Stimmen

Dies ist Teil des Umleitungsparagraphen, der POSIX-konforme Shells oder kurz POSIX-Shells beschreibt. ksh ist zum Beispiel eine POSIX-Shell. Siehe: pubs.opengroup.org/onlinepubs/009695399/utilities/

19 Stimmen

Dieses Konstrukt funktioniert auch unter Windows.

2voto

ch271828n Punkte 12353

0 für input, 1 für stdout und 2 für stderr.

Ein Tipp : somecmd >1.txt 2>&1 korrekt ist, während somecmd 2>&1 >1.txt ist völlig falsch ohne jede Wirkung!

0voto

yuranos Punkte 6632

Beachten Sie, dass 1>&2 kann nicht austauschbar verwendet werden mit 2>&1 .

Stellen Sie sich vor, Ihr Befehl hängt zum Beispiel von Piping ab:
docker logs 1b3e97c49e39 2>&1 | grep "some log"
Das Greifen erfolgt über beide stderr y stdout seit stderr ist im Grunde genommen aufgegangen in stdout .

Aber wenn Sie es versuchen:
docker logs 1b3e97c49e39 1>&2 | grep "some log" ,
grepping wird nirgendwo wirklich suchen, da die Unix-Pipe Prozesse über connecting verbindet stdout | stdin y stdout im zweiten Fall wurde umgeleitet zu stderr an denen die Unix-Pipe kein Interesse hat.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X