假设在POSIX环境中有一个程序,如:
echo "stdout good"
echo "stdout bad"
echo "STDERR GOOD" 1>&2
echo "STDERR BAD" 1>&2
我需要分别进入stdout和stderr:
stdout good
STDERR GOOD
也就是说,您需要将stdout和stderr重定向到两个不同的过滤器,同时保留输出顺序。2>&1
不能使用简单
,因为不能混合两个流。将stderr重定向到具有后续过滤和输出到stderr的文件也是不可能的,因为行序列丢失了。对于不同的命名管道,问题很可能是相同的。
制作 2 个 fifo 并在那里发送流。您将过滤器的进一步任务发送到后台,您可以编写。
带管道
如果一个过滤器比另一个慢,则一致性会丢失。但是当我们读取程序的输出时,它比最慢的过滤器慢,它应该可以正常工作。