我正在尝试编写一个 bash 脚本来做一些事情,启动一个进程,等待该进程说它准备好了,然后在该进程继续运行的同时做更多的事情。我遇到的问题是找到一种方法来等待该进程在继续之前准备就绪,并允许它继续运行。
在我的特定情况下,我正在尝试设置 PPP 连接。在运行下一个命令之前,我需要等到它连接好。如果 PPP 无法连接,我还想停止脚本。 pppd 打印到标准输出。
在伪代码中我想做的是:
[some stuff]
echo START
[set up the ppp connection]
pppd <options> /dev/ttyUSB0
while 1
if output of pppd contains "Script /etc/ppp/ipv6-up finished (pid ####), status = 0x0"
break
if output of pppd contains "Sending requests timed out"
exit 1
[more stuff, and pppd continues to run]
echo CONTINUING
关于如何做到这一点有什么想法吗?
最佳答案
我不得不做类似的事情等待/var/log/syslog 中的一行出现。这对我有用:
FILE_TO_WATCH=/var/log/syslog
SEARCH_PATTERN='file system mounted'
tail -f -n0 ${FILE_TO_WATCH} | grep -qe ${SEARCH_PATTERN}
if [ $? == 1 ]; then
echo "Search terminated without finding the pattern"
fi
它将附加到监视文件的所有新行通过管道传输到 grep 并指示 grep 在发现模式后立即退出。以下 if 语句检测“等待”是否在未找到模式的情况下终止。
关于bash - 我如何等待某个进程的某些输出然后在 Bash 中继续?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7197527/