Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Bash grep在打印之前等待更多行_Bash_Grep - Fatal编程技术网

Bash grep在打印之前等待更多行

Bash grep在打印之前等待更多行,bash,grep,Bash,Grep,我将此命令放入bash,希望它打印FOO,然后等待更多输入: (echo FOO; cat) | grep FOO | cat 取而代之的是,它不打印任何内容,并一直等到我按下Ctrl+D键后才显示任何内容 如果我最后删除| cat,问题就会消失 这是怎么回事?grep是否在等待更多的线路,并且只在接到其他线路时?还是bash/cat正在等待?第一个cat正在等待输入 grep,出于性能原因,正在分块读取,没有足够的输入,所以它只是等待。这可以通过强制读取每一行来解决: (echo FOO;

我将此命令放入bash,希望它打印
FOO
,然后等待更多输入:

(echo FOO; cat) | grep FOO | cat
取而代之的是,它不打印任何内容,并一直等到我按下Ctrl+D键后才显示任何内容

如果我最后删除
| cat
,问题就会消失


这是怎么回事?grep是否在等待更多的线路,并且只在接到其他线路时?还是bash/cat正在等待?

第一个
cat
正在等待输入

grep
,出于性能原因,正在分块读取,没有足够的输入,所以它只是等待。这可以通过强制读取每一行来解决:

(echo FOO; cat) | grep --line-buffered FOO | cat

两个
cat
s都是不必要的。当你自己说当你移除最后一只猫的时候问题就消失了,你为什么会认为是grep在等待呢?第一只猫是问题所在,你没有给它一个参数,所以它是从标准文本中读取的。我知道,我在发布之前简化了这个问题。最初,最后一个
cat
是另一个grep命令,而
(echo FOO;cat)
是一个
tail-f
。我怀疑grep正在等待,因为我把它传送到什么地方似乎并不重要,只要它被传送到什么地方就行。我还知道,命令可以判断它是否通过管道传输到某个地方。例如,
grep
可以在命令行上使用颜色打印,但不需要在某个地方使用if管道。我不认为在这样的理论问题中,
cat
s是“不必要的”。grep不会等待,而将
tail-f
管道插入两个grep不会等待输入,除非grep没有匹配任何内容。发布您的实际问题,而不是明显由cat等待引起的问题。@MichaelJaros他们怎么不能,命令在没有他们的情况下可以工作,但不会处理他们?这仍然需要更多的输入,所以我没有错。实际上我要承认我误读了问题,完全错了,因为Op想要这种行为:(当然,它会等待,直到stdin关闭。谢谢!我想这是同一个问题,因为我也找到了一些信息和。对@JID,它挂起不定,就像原来的帖子一样。@NullSoulException:这正是OP想要的。问题是grep没有打印任何东西,尽管有匹配的行。