我有一个在后台启动某些服务的 bash 脚本。此服务成功启动后,它会将“服务器处于事件状态”打印到标准输出。我需要等到这个字符串出现,然后继续执行我的脚本。我怎样才能做到这一点?
最佳答案
我会这样做。
./server > /tmp/server-log.txt &
sleep 1
while ! grep -m1 'Server is active' < /tmp/server-log.txt; do
sleep 1
done
echo Continue
此处 -m1
告诉 grep(1)
在第一次匹配时退出。
我用下面的玩具“服务”验证了我的答案:
#! /bin/bash
trap "echo 'YOU killed me with SIGPIPE!' 1>&2 " SIGPIPE
rm -f /tmp/server-output.txt
for (( i=0; i<5; ++i )); do
echo "i==$i"
sleep 1;
done
echo "Server is active"
for (( ; i<10; ++i )); do
echo "i==$i"
sleep 1;
done
echo "Server is shutting down..." > /tmp/server-output.txt
如果将 echo Continue
替换为 echo Continue; sleep 1; ls/tmp/server-msg.txt
,你会看到 ls: cannot access/tmp/server-output.txt: No such file or directory
这证明“继续”操作是在 Server is active
的输出后立即触发。
关于linux - 等到服务在 bash 脚本中启动,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21475639/