¿Puede redireccionar stdout y stderr a las mismas líneas de cambio de archivos?


8

He leído que cuando se redirige stdouty se stderrusa el mismo archivo 2>&1, stdoutgeneralmente se bloquea el búfer mientras no stderrestá protegido .

Si se escribe una línea muy larga stdout, que requiere dos descargas separadas del búfer, ¿podría suceder que una línea se stderrdeslice en el medio? Algo como esto:

stdout:   aaaaaaaa.....really long line......aaaaaaaaaaaa<newline>

stderr:   eee<newline>

combined: aaaaaaaaaaaaaaaaeee<newline>
          aaaaaaa<newline>

Respuestas:


7

Sí, exactamente eso puede suceder si las líneas stdoutson lo suficientemente largas.

#!/usr/bin/perl
use strict;
use warnings;

for (1..10) {
    print "START"; print "-" x 100000; print "END\n";
    warn "!\n";
}

Corriendo:

./writer.pl > out 2>&1

Comprobación: abra el archivo outen un editor y encuentre stderr !en el medio -, no siempre entre ENDySTART

Esto variará entre sistemas operativos, idiomas y sistemas de varias maneras, pero su suposición básica es correcta. Experimento de longitud variable de stdout líneas: print "-" x 100, print "-" x 10000etc.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.