Shell

可以將stdout 和stderr 重定向到同一個文件mangle 行嗎?

  • February 8, 2014

我已經讀過,當使用 , 重定向stdoutstderr同一個文件時2>&1stdout通常是塊緩衝的,而stderr沒有緩衝。

如果寫入很長的一行stdout,需要兩次單獨刷新緩衝區,是否會發生一行從stderr中間滑落的情況?像這樣的東西:

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

stderr:   eee<newline>

combined: aaaaaaaaaaaaaaaaeee<newline>
         aaaaaaa<newline>

是的,如果行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 -,並不總是在END和之間START

這會因作業系統、語言和系統而異,但您的基本假設是正確的。通過改變標準輸出行的長度進行實驗:print "-" x 100print "-" x 10000

引用自:https://unix.stackexchange.com/questions/114182