2010-12-31 7 views

Antwort

34

stderr wird nicht zu stdout umgeleitet. Beide Streams sind standardmäßig nur mit demselben Gerät (dem aktuellen Bildschirm oder Terminal) verbunden.

Sie können sie umleiten auf verschiedene Dateien:

$ command > stdout.log 2> stderr.log 

Um tatsächlich stderr zu stdout zu umleiten, müssen Sie erteilen:

$ command 2>&1 
0

Wie stdout wird stderr in der Regel an den Ausgang gerichtet Gerät der Standardkonsole (in der Regel der Bildschirm). Das heißt, stderr wird nicht zu stdout umgeleitet, aber sie teilen einen gemeinsamen Dateideskriptor. Es ist möglich, stderr von einem Programm aus über die Funktion freopen an ein anderes Ziel umzuleiten.

+4

Nun, technisch teilen sie nicht einmal einen Dateideskriptor: 'stdout' ist' fd1' und 'stderr' ist' fd2'. –

+0

Fd von stdout ist 1 und fd os stderr ist 2 dann wie können sie fd teilen? – user559208

+2

@ user559208, sie nicht. Jeder hat seinen eigenen Dateideskriptor. –

5

Es ist nicht; Es passiert einfach, dass sowohl stdout als auch stderr normalerweise auf den gleichen Ausgabestrom (normalerweise die Konsole) abgebildet werden. Wenn Sie beispielsweise stdout in eine Datei umleiten, werden Sie feststellen, dass stderr an die Konsole weitergeleitet wird.

Der wichtige Punkt ist, dass sie unabhängig umleitbar sind.