用于在终端输出中搜索特定单词的Bash脚本
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了用于在终端输出中搜索特定单词的Bash脚本相关的知识,希望对你有一定的参考价值。
我正在尝试实现一个bash脚本,该脚本应该在Python脚本终端输出中搜索一个单词。
Python脚本不会停止,因此需要命令末尾的“&”,但“if [$?== 0]; then”条件不起作用。
如何解决?
谢谢,加尔。
#!/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')
您正在使用grep
检查循环中$?
命令输出的状态。如果$?
是grep之后要触发的下一个命令,并且grep不是后组进程,则可以执行此操作。但是在你的脚本中,$?
将返回while [$SECONDS -lt $end ]
的状态。您可以尝试将输出重定向到临时文件并检查其状态
/usr/local/bin/mavproxy.py --daemon --non-interactive --master=$PORT | grep 'Failed' &> tmp.txt &
sleep 3
# If file exists and it's size is greater than 0, [ -s File] will return true
if [ -s tmp.txt ]; then
echo 'pattern exists'
else
echo 'pattern not exists'
fi
Bash对后台命令的输出一无所知。用[ 5444 -lt 3 ] & echo $?
检查自己。
你的if
语句在任何情况下都不会起作用,因为$?
检查最近一个上一个命令的返回值,在这种情况下是你的while
循环。
你有几个不同的选择。如果你正在等待一些输出,并且你知道它在输出中有多长,直到你正在寻找的任何目标发生,你可以让python写入一个文件并继续检查文件大小和失败超时。
您还可以继续使用简单的定时方法,只需几秒钟后检查输出,然后根据该方法确定成功或失败。
您可以使您的python脚本实际结束,或提供更多错误消息,或只写相关部分以这种方式存档。
此外,你真的应该通过shellcheck.net运行你的脚本来发现更多的问题。
您需要更清楚地定义您的目标和用例以获得真正的帮助;我们真正可以说的是“你的方法不会起作用,但肯定会有一些方法可行”
以上是关于用于在终端输出中搜索特定单词的Bash脚本的主要内容,如果未能解决你的问题,请参考以下文章
如何在当前文件夹和所有子文件夹中的所有文件中搜索特定文件内容[重复]
在 C# 字符串中的 HTML 中搜索特定文本并标记文本的最佳方法是啥?