我需要在输入的特定时间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 :(得分: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")