输出前错误管道
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
输出。解决这个问题的唯一方法是不使用管道,而是将输出重定向到一个临时文件。然后,使用该文件执行您需要执行的操作。
假设你有一组命令,有的报错如下:
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
输出。解决这个问题的唯一方法是不使用管道,而是将输出重定向到一个临时文件。然后,使用该文件执行您需要执行的操作。