2013-08-07 92 views
0

我需要在一個特定的時間到grep特定字符串的輸入:超時在bash腳本的grep

trap "kill 0" EXIT SIGINT SIGTERM 
RESULT=$(adb logcat MyTag:V *:S | grep -m 1 "Hello World") & 
sleep 10 
if [ "$RESULT" = "" ]; then 
    echo "Timeout!" 
else 
    echo "found" 
fi 

與陷阱子shell被正確地殺害了,但我看到的grep不工作了現在。 adb logcat是在子shell運行的唯一程序,執行腳本

+0

對不起,在真正的腳本中我使用adb logcat的輸出,而不是貓。那只是一個簡短的測試。 – reox

回答

0

你可以打開一個文件描述符與進程替換輸入子shell。 n秒後你可以讀取結果。

{ 
    sleep 10 
    IFS= read -rd '' -u 4 RESULT 
    if [ "$RESULT" = "" ]; then 
     echo "Timeout!" 
    else 
     echo "found" 
    fi 
} 4< <(adb logcat MyTag:V *:S | grep -m 1 "Hello World") 

你也可以使用exec保持它不是內{}而已。

雖然我仍然想知道爲什麼你必須將該命令放在後臺並使用sleep來等待它。它使用子shell運行,因此保存在RESULT中的值將始終丟失。

RESULT=$(adb logcat MyTag:V *:S | grep -m 1 "Hello World") & 
sleep 10 

RESULT=$(adb logcat MyTag:V *:S | grep -m 1 "Hello World") 
0

當你能殺死使用$!(在最後一個進程調用PID)

+0

謝謝!我發現與subshel​​l的錯誤,但現在grep不再工作。 – reox