[英]Bash process substitution with pipe
假设我有一个文件t.txt,其中许多行包含“ a”。 我很困惑为什么这不起作用:
cat <(tail -f t.txt | grep a)
上面的命令只是挂起而不打印任何内容,即使每一行都有一个匹配项。 这是因为cat正在等待“ tail”而不是“ grep”的输出? 我怎样才能解决这个问题?
顺便说一句,我尝试了另一个具有双进程替换的变体:
cat <(grep a <(tail -f t.txt))
这也挂不打印任何内容。
有人有线索吗?
添加grep的选项--line-buffered
。
参见man grep
。
对于不带--line-buffered
参数的程序,可以使用stdbuf
:
cat <(tail -f t.txt | stdbuf -oL grep a)
这是如何工作的,这真是神奇。 最好不要考虑。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.