2012-12-17 129 views
1

我在bash两个方案:为什么管道顺序很重要?

{ { sleep 1s; kill 0; } | { while true; do echo "foo"; done; kill 0;} } 

{ { while true; do echo "foo"; done; kill 0; } | { sleep 1s; kill 0; } } 

(只是改变顺序)。

第一个可能在输出中写了很多“foo”,第二个写什么都没有?

回答

2

通过管道连接两个进程将输出从第一个输出重定向到第二个输入。因此,连接将输出写入不执行输出意味着没有输出的进程的进程。

相比之下,连接一个对生成输出的进程没有任何作用的进程,后者将像往常一样继续生成输出。

顺便说一下,kill 0行的目的是什么?我非常怀疑他们在这里有用。

2

第二个不输出foo,你只是没有看到它的输入,因为它是通过管道输送到你的第二个命令。

$ { { while true; do echo "foo" >> /tmp/f; done; kill 0; } | { sleep 1s; kill 0; } } 
$ wc -l /tmp/f 
56209 

您可以通过重定向到一个文件证明这一点

相关问题