在我的 bash 脚本中,如何编写仅在 "tail" 的输出不包含字符串时才存在的 while 循环?
In my bash script, how do I write a while loop that only exits if the output of "tail" doesn't contain a string?
我正在使用亚马逊 Linux 和 bash shell。在我的 bash 脚本中,我如何构造一个 while 循环,只要命令
tail -10 /usr/java/jboss/standalone/log/server.log
不包含字符串“FrameworkServlet‘myprojectDispatcher’:初始化完成”?
您可以使用:
tail -n 10 -f /usr/java/jboss/standalone/log/server.log |
awk '/FrameworkServlet.*myprojectDispatcher.*initialization completed/{exit} 1'
awk
遇到搜索字符串时会退出,否则会继续将输入写入标准输出。
但是请记住,tail
命令是缓冲的,要避免这种行为,请尝试 stdbuf
gnu 实用程序:
stdbuf -i0 -o0 -e0 tail -n 10 -f /usr/java/jboss/standalone/log/server.log |
awk '/FrameworkServlet.*myprojectDispatcher.*initialization completed/{exit} 1'
我可以试试这个:
#!/bin/bash
MATCH="FrameworkServlet ‘myprojectDispatcher': initialization completed"
while :
do
if tail /usr/java/jboss/standalone/log/server.log | grep -q "$MATCH"; then
exit 0
else
sleep 1
fi
done
while [ -nz grep -q "FrameworkServlet ‘myprojectDispatcher': initialization completed" /usr/java/jboss/standalone/log/server.log ]; do
# wait a second
sleep 1
done
# do the stuff
echo "we got it!"
我正在使用亚马逊 Linux 和 bash shell。在我的 bash 脚本中,我如何构造一个 while 循环,只要命令
tail -10 /usr/java/jboss/standalone/log/server.log
不包含字符串“FrameworkServlet‘myprojectDispatcher’:初始化完成”?
您可以使用:
tail -n 10 -f /usr/java/jboss/standalone/log/server.log |
awk '/FrameworkServlet.*myprojectDispatcher.*initialization completed/{exit} 1'
awk
遇到搜索字符串时会退出,否则会继续将输入写入标准输出。
但是请记住,tail
命令是缓冲的,要避免这种行为,请尝试 stdbuf
gnu 实用程序:
stdbuf -i0 -o0 -e0 tail -n 10 -f /usr/java/jboss/standalone/log/server.log |
awk '/FrameworkServlet.*myprojectDispatcher.*initialization completed/{exit} 1'
我可以试试这个:
#!/bin/bash
MATCH="FrameworkServlet ‘myprojectDispatcher': initialization completed"
while :
do
if tail /usr/java/jboss/standalone/log/server.log | grep -q "$MATCH"; then
exit 0
else
sleep 1
fi
done
while [ -nz grep -q "FrameworkServlet ‘myprojectDispatcher': initialization completed" /usr/java/jboss/standalone/log/server.log ]; do
# wait a second
sleep 1
done
# do the stuff
echo "we got it!"