Ben*_*min 4 shell io-redirection
我有几个进程在STDOUT
和上产生输出STDERR
,我已将其重定向到编号的文件描述符,并且我想将所有输出整理到一个文件中。
我天真地尝试过
[input processes] | cat <3 <4 <5 2>&1 >[output file]
Run Code Online (Sandbox Code Playgroud)
但是当然,这不起作用,因为 catSTDIN
在从任何后续管道读取数据之前会等到它的管道关闭,导致我的进程在其他管道的缓冲区变满时挂起。
有什么建议?
将输出整理在一起并不是tee
. tee
制作其输入的多个副本,而整理输出不涉及任何数据合并。
要合并输出源,只需将它们全部重定向到相同的文件描述符。源的交错通常有些不可预测,但保证对管道的足够小写入是原子的。(能够从阅读方面说出界限是另一回事。)
{ data_source_1 &
data_source_2 &
wait; } >merged_output
Run Code Online (Sandbox Code Playgroud)
如果您从多个文件描述符获取输入并且想要合并它们,请将它们中的每一个都传递过去。
{ cat <&3 & cat <&4 & wait; } >merged_ouput
Run Code Online (Sandbox Code Playgroud)
但通常您可以将所有文件描述符重定向到同一目的地。
… 3>merged_ouput 4>&3
Run Code Online (Sandbox Code Playgroud)