假设我有一个文件t.txt,其中有许多行包含' a'。我很疑惑为什么这不起作用:
cat <(tail -f t.txt | grep a)
上面的命令只是挂起而不打印任何内容,即使每行都有匹配。这是因为猫正在等待&#34;尾巴&#34;的输出而不是&#34; grep&#34;?我该如何解决这个问题?
顺便说一句,我尝试了另一种具有双重过程替换的变体:
cat <(grep a <(tail -f t.txt))
这也会挂起而不打印任何东西。
有没有人有线索?
答案 0 :(得分:5)
添加grep选项--line-buffered
。
请参阅man grep
。
答案 1 :(得分:1)
对于不带--line-buffered
参数的程序,您可以使用stdbuf
:
cat <(tail -f t.txt | stdbuf -oL grep a)
这是如何运作纯粹的魔力;最好不要考虑它。