timeout 0.6s $(tail -f ./file.txt | grep -qA2 --line-buffered "detail: " | grep -E -- "$KeyNumbers")
所以超时没有按预期发挥作用。我希望它在 0.6 秒后如果 tail 没有匹配则取消,如果找到匹配但超时以具有退出状态则继续...但相反,如果 $(tail...) 部分当前仅继续经过此点找到匹配项。
echo $? 也没有找到退出代码,好像超时无法控制?
我也尝试过不用 $( ) 括起尾部,结果更糟。我在这里缺少什么?有更好的解决方案吗?
解决方案:
谢谢@lukemassa
您的帮助。工作结果是:
timeout 0.6s tail -f ./file.txt | grep -qA2 --line-buffered -E -- "detail: $KeyNumbers"
他们的帖子解释了这一点,并且在评论中提出了第二个 grep 命令的意义问题,如果第一个命令是 -q (本质上抑制输出),这让我意识到我没有像以前在脚本中那样将它们组合起来其他元素。
答案1
$()
shell 会评估其中的内容,因此变成
timeout 0.6s "stuff from the file"
然后将尝试执行并失败。
你有没有尝试过:
timeout 0.6s tail -f ./file.txt | grep -qA2 --line-buffered "detail: " | grep -E -- "$KeyNumbers"