stdoutとstderrを同じファイルのマングル行にリダイレクトできますか?


8

リダイレクトstdoutを使用stderrして同じファイルにを使用すると2>&1stdout通常stderrはバッファリングされていないのにブロックバッファリングされると読みました。

非常に長い行がに書き込まれstdout、バッファーの2回のフラッシュが必要な場合、行がstderr途中でずれることがありますか?このようなもの:

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

stderr:   eee<newline>

combined: aaaaaaaaaaaaaaaaeee<newline>
          aaaaaaa<newline>

回答:


7

はい、正確にそれは行stdoutが十分に長い場合に起こります。

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

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

ランニング:

./writer.pl > out 2>&1

チェック:outエディターでファイルを開いて、常にとの!-ではなく、間にstderrを見つけますENDSTART

これは、OS、言語、システムによってさまざまですが、基本的な仮定は正しいです。STDOUTラインの長さを変えることによって実験:print "-" x 100print "-" x 10000

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.