为什么`读-t`没有在RHEL的bash中超时?

Chr*_*ris 6 linux bash rhel5

read -t在RHEL5或RHEL6上读取管道时为什么没有超时?

这是我的示例,在我的RHEL框中没有超时从管道中读取:

tail -f logfile.log | grep 'something' | read -t 3 variable
Run Code Online (Sandbox Code Playgroud)

如果我是正确的,read -t 3应该在3秒后超时?

提前谢谢了.

克里斯

GNU bash, version 4.1.2(1)-release (x86_64-redhat-linux-gnu)
Run Code Online (Sandbox Code Playgroud)

che*_*ner 2

虽然不是对您的具体问题的直接答案,但您需要运行类似的命令

read -t 3 variable < <( tail -f logfile.log | grep "something" )
Run Code Online (Sandbox Code Playgroud)

为了variable在管道完成后新设置的值可见。看看这是否按预期超时。


由于您只是将其用作read在固定时间后退出管道的一种方式,因此您不必担心variable. 但是,grep由于其自​​身的内部缓冲,可能会在超时内找到匹配项而不打印它。您可以GNU grep使用以下选项禁用它(至少使用 )--line-buffered

tail -f logfile.log | grep --line-buffered "something" | read -t 3
Run Code Online (Sandbox Code Playgroud)

另一个选项(如果可用)是timeout替代以下命令的命令read

timeout 3 tail -f logfile.log | grep -q --line-buffered "something"
Run Code Online (Sandbox Code Playgroud)

这里,我们在3秒后杀死,并以通常的方式tail使用退出状态。grep