输出前错误管道

Error piping before output

假设你有一组命令,有的报错如下:

 begin;
     echo “Starting Test";
     ls;
     bad_command -xyz;
 end

如果您不重定向输出或错误,结果如预期的那样,即

Starting Test
foo.txt
someotherfile.png
someDir
Unknown command: ‘bad_command’ 

但是,如果我通过将最后一行更改为 end 2&>1 | open -f -a TextEdit 将整个块通过管道传输到 TextEdit,错误首先出现在文件中,并且顺序混乱。当管道传输到其他命令时也会发生这种情况。为什么会发生这种情况,我该如何预防?

您遇到此问题是因为管道会缓冲 stdout 但不会缓冲 stderr,因此您首先得到 stderr 输出。解决这个问题的唯一方法是不使用管道,而是将输出重定向到一个临时文件。然后,使用该文件执行您需要执行的操作。