我写了一个脚本来一一启动我的服务。每个服务完成后,它应该执行下一个命令,并等待第一个命令执行,因为我给出了这个命令:
wait_for "Server started in RUNNING mode"
wait_for "socket listener started on port"
但它并没有采用这个逻辑
wait_for() {
res=0
while [[ ! $res -gt 0 ]]
do
res=$(tail -5 "$START_LOG" | fgrep -c "$1")
sleep 5
done
}
答案1
wait_for() {
( tail -n5 -F "$START_LOG" 2>/dev/null & ) | fgrep -l "$1" >/dev/null
}
-F
意味着即使日志旋转也遵循
&
发送tail
到后台,这样父 shell 就不会等待它死掉。该进程将挂起一段时间,直到记录下一条消息。