Bash

Bash - 帶有尾部問題的“超時”

  • April 25, 2021
timeout 0.6s $(tail -f ./file.txt | grep -qA2 --line-buffered "detail: " | grep -E -- "$KeyNumbers")

所以超時沒有按預期執行。如果 tail 在 0.6 秒後沒有匹配,我希望它取消,如果找到匹配但超時以具有退出狀態,則繼續…但它目前僅在 $(tail…) 部分超過這一點找到匹配項。

echo $? 也找不到退出程式碼,就好像 timeout 無法控制一樣?

我也試過沒有用 $( ) 括住尾巴,結果更糟。我在這裡想念什麼?有更好的解決方案嗎?

解決方案:

感謝@lukemassa您的幫助。工作結果是:

timeout 0.6s tail -f ./file.txt | grep -qA2 --line-buffered -E -- "detail: $KeyNumbers"

他們的文章對此進行了解釋,並且在評論中是第二個 grep 命令的問題,如果第一個是 -q (基本上抑制輸出),這讓我意識到我沒有像以前在我的腳本中那樣組合它們其他元素。

裡面的$()內容由外殼評估,所以變成

timeout 0.6s "stuff from the file"

然後它將嘗試執行並失敗。

你有沒有嘗試過:

timeout 0.6s tail -f ./file.txt | grep -qA2 --line-buffered "detail: " | grep -E -- "$KeyNumbers"

引用自:https://unix.stackexchange.com/questions/646670