bash - 我如何等待某个进程的某些输出然后在 Bash 中继续?

标签 bash

我正在尝试编写一个 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/

相关文章:

bash - bash 脚本中的错误替换

bash - linux bash 中 python zip() 函数的等价物是什么?

linux - Bash 如何解释这些语句?

bash - 如果源脚本在函数中运行,为什么 bash 变量不是全局变量?

linux - "ls"在 cmd 行中工作,但在名称中有空格的目录的脚本中不工作

linux - 如何将 bash 脚本的输出重定向到 stderr

python - 如何让 Shebang 能够在 python3 和 python3.5 之间选择正确的 Python 解释器

linux - 如何从指定文件中替换IP地址

Linux:如何移动同名、不同扩展名的文件。进入他们自己的文件夹?

bash - 我需要引用命令替换吗?