バックグラウンドで何らかのサービスを開始する bash スクリプトがあります。このサービスが正常に開始されると、stdout に「Server is active」と出力されます。この文字列が表示されるまで待ってから、スクリプトの実行を続行する必要があります。どうすればこれを実現できますか?
ベストアンサー1
私ならこのようにします。
./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