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.
7 Stimmen
Es ist im Allgemeinen besser, wenn
2>&1
als 2>/dev/null ;-)18 Stimmen
Ich dachte, ich sollte erwähnen, dass
|&
ist die Kurzform für2>&1 |
wenn Sie zsh benutzen. Ich kann nicht sagen, ob das auch für andere Bourne-ähnliche Shells gilt oder ob es nur eine Funktion von zsh ist.4 Stimmen
@chrixian
|&
ist auch in Bash, eine großartige Funktion. Nicht POSIX scheint es aber (?)2 Stimmen
Sie können diese Antwort überprüfen stackoverflow.com/questions/10508843/what-is-dev-null-21/
0 Stimmen
@chrixian dies ist definitiv in tcsh erforderlich, da
2>^1
funktioniert dort nicht