使用管道替换Bash进程

时间:2018-06-13 02:37:59

标签: linux bash pipe

假设我有一个文件t.txt,其中有许多行包含' a'。我很疑惑为什么这不起作用:

cat <(tail -f t.txt | grep a)

上面的命令只是挂起而不打印任何内容,即使每行都有匹配。这是因为猫正在等待&#34;尾巴&#34;的输出而不是&#34; grep&#34;?我该如何解决这个问题?

顺便说一句,我尝试了另一种具有双重过程替换的变体:

cat <(grep a <(tail -f t.txt))

这也会挂起而不打印任何东西。

有没有人有线索?

2 个答案:

答案 0 :(得分:5)

添加grep选项--line-buffered

请参阅man grep

答案 1 :(得分:1)

对于不带--line-buffered参数的程序,您可以使用stdbuf

cat <(tail -f t.txt | stdbuf -oL grep a)

这是如何运作纯粹的魔力;最好不要考虑它。