Bash连续读取后台进程的输出

问题描述:

我必须运行两个进程并行并连续处理它们的输出。Bash连续读取后台进程的输出

基本执行应该在bash脚本如下执行Python脚本启动:

python somefile.py & 
python someotherfile.py & 

他们都跑了很长时间并生成日志输出。我想处理它们两个的输出(哪个程序生成日志输出并不重要)。

是否有可能将输出重定向到一个处理它的函数?

+0

我认为你所要求的是命名管道。谷歌应该能够帮助你。 –

+0

主要问题是:您是否需要在同一个过程中处理两者的输出(即,如果两者之间存在交互作用),还是可以分别处理两个输出?第二种情况很简单,第一种情况涉及命名管道或文件描述符(可以像命名管道一样运行,不需要创建文件)。 – Fred

+0

对不起,我不明白你的意思是第一个案件? – wasp256

这是我想到的最简单的事情。

文件a.sh:

while true; do 
    echo A 
    sleep 0.5 
done 

文件b.sh:

while true; do 
    echo B 
    sleep 1.2 
done 

文件c.sh:

(
./a.sh & 
./b.sh & 
) | while read output; do 
    echo "C: read $output" 
done 

文件c.sh启动a.shb.sh,无论是在背景,并从两者读取输出。当c.sh运行时,输出是:

C: read A 
C: read B 
C: read A 
C: read A 
C: read B 
C: read A 
C: read A 
C: read B 
C: read A 
C: read A 

诀窍是使用括号将命令组合在单个单元(以及另一个shell)中。这些命令运行(在本例中为后台),并将整个stdout传送到while循环中。