bash脚本中的grep超时

时间:2013-08-07 09:30:42

标签: bash grep

我需要在输入的特定时间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中运行的唯一进程

2 个答案:

答案 0 :(得分:0)

你可以使用$!(调用的最后一个进程的pid)来杀死子shell吗?

答案 1 :(得分:0)

您可以使用进程替换打开文件描述符作为输入。在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")