Shell
可以將stdout 和stderr 重定向到同一個文件mangle 行嗎?
我已經讀過,當使用 , 重定向
stdout
到stderr
同一個文件時2>&1
,stdout
通常是塊緩衝的,而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 100
等print "-" x 10000
。