bash脚本中grep的超时

bash脚本中grep的超时,bash,grep,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 log

我需要在输入的特定时间内对特定字符串进行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中运行的唯一进程,当执行脚本时

可以使用
$杀死子shell吗(上次调用的进程的pid)

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

对不起,在真实的脚本中,我使用adb logcat的输出,而不是cat的输出。那只是一个简短的测试。谢谢!我发现了子shell的错误,但是现在grep不再工作了。
RESULT=$(adb logcat MyTag:V *:S | grep -m 1 "Hello World") &
sleep 10

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