可以将stdout和stderr重定向到同一文件行吗?


8

我读过的重定向时stdoutstderr同一个文件使用2>&1stdout通常,嵌段缓冲,而stderr不是缓冲。

如果将很长的行写入stdout,需要两次单独的缓冲区刷新,stderr中间发生滑动的行会发生吗?像这样:

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

stderr:   eee<newline>

combined: aaaaaaaaaaaaaaaaeee<newline>
          aaaaaaa<newline>

Answers:


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 -,而不总是在END和之间找到START

这在OS,语言和系统之间会有所不同,但是您的基本假设是正确的。通过改变标准输出线的长度进行实验:print "-" x 100print "-" x 10000等等。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.