繁体   English   中英

用管道替换Bash流程

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM