2010-12-31 19 views

Respuesta

34

stderr no se redirige a stdout. Ambas transmisiones solo están conectadas al mismo dispositivo (la pantalla o terminal actual) de manera predeterminada.

Puede redirigirlos a diferentes archivos:

$ command > stdout.log 2> stderr.log 

Con el fin de redirigir realidad stderr a stdout, que tiene que emitir:

$ command 2>&1 
0

Como stdout, stderr se dirige sobre todo a la salida dispositivo de la consola estándar (generalmente, la pantalla). Eso significa que stderr no se redirige a stdout pero comparten un descriptor de archivo común. Es posible redirigir stderr a algún otro destino desde un programa utilizando la función freopen.

+4

Bueno, técnicamente ni siquiera comparten un descriptor de archivo: 'stdout' es' fd 1' y 'stderr' es' fd 2'. –

+0

Fd de stdout es 1 y fd os stderr es 2, ¿cómo pueden compartir fd? – user559208

+2

@ user559208, no es así. Cada uno tiene su propio descriptor de archivo. –

5

No lo es; simplemente ocurre que tanto stdout como stderr suelen asignarse al mismo flujo de salida (generalmente la consola). Si redirige el stdout a un archivo, por ejemplo, encontrará que stderr permanece dirigido a la consola.

Lo importante es que se pueden redireccionar de forma independiente.

Cuestiones relacionadas