用于在终端输出中搜索特定单词的Bash脚本

时间:2018-07-29 16:42:08

标签: bash shell

我正在尝试实现一个bash脚本,该脚本应该在Python脚本终端输出中搜索一个单词。

Python脚本不会停止,因此命令末尾需要“&”,但是“ if [$?== 0];那么”条件不起作用。

如何解决?

谢谢,加尔。

#!/bin/bash

#Check if Pixhawk is connected
PORT=/dev/ttyPixhawk

end=$((SECONDS+3))

not_exists=f
/usr/local/bin/mavproxy.py --daemon --non-interactive --master=$PORT | grep 'Failed' &> /dev/null &

while [ $SECONDS -lt $end ] ; do
    if [ $? == 0 ] ; then
       not_exists=t
    fi
    sleep 1
done

if [ $not_exists=t ] ; then
    echo "Not Exists"
else
    echo "Exists"
fi

kill $(pgrep -f '/usr/local/bin/mavproxy.py')

2 个答案:

答案 0 :(得分:1)

Bash对后台命令的输出一无所知。用[ 5444 -lt 3 ] & echo $?检查自己。

您的if语句在任何情况下都不起作用,因为$?会检查最近的前一条命令的返回值,在这种情况下,这是您的while循环。

您有几种选择。如果您在等待某些输出,并且知道输出在到达您要查找的目标之前存在多长时间,则可以让python将文件写入文件,并通过超时检查文件大小以确保失败

您还可以继续使用简单的定时方法,因为您只需在几秒钟后检查输出,然后根据该结果确定成功或失败。

您可以使python脚本实际结束,或提供更多错误消息,或仅将相关部分写入文件。

此外,您确实应该通过shellcheck.net运行脚本,以发现更多问题。

您需要更清晰地定义目标和用例,以获得真正的帮助;我们真正能说的是“您的方法行不通,但是肯定有一些方法行得通”

答案 1 :(得分:0)

您正在使用babel command not recognized as an external or internal command在while循环中检查grep命令输出的状态。如果$?是grep之后要触发的下一个命令,并且grep不是back-group进程,则可以执行此操作。但是在您的脚本中,$?将返回$?的状态。您可以尝试将输出重定向到临时文件并检查其状态

while [$SECONDS -lt $end ]