
スクリプトを使用してbash
、プロセスを開始し、特定の文字列stdout
(つまり'Server Initialized'
) が書き込まれるのを待ってから、それをバックグラウンドに送信してスクリプトを続行しようとしています。 が一度印刷されると、'Server Initialized'
プロセス出力は無視されます ( にリダイレクトされます/dev/null
)。
現時点ではハックとして 10 秒待って、サーバーが起動したと想定しています。
( ./long_running_process ) > /dev/null 2>&1 &
# sleep 10
echo 'I run after long_running_process prints "Server Initialized"
タイムアウト後に検索文字列が表示されなかった場合はボーナスポイントが付与され、エラーステータスコードで終了します。
答え1
アイデアは、サーバーをバックグラウンドで実行し、期待される文字列が出現する限り、その出力をgrepすることです'Something 3'
('Server Initialized'
あなたの場合)
#!/bin/bash
main()
{
output=$(mktemp "${TMPDIR:-/tmp/}$(basename $0).XXX")
server &> $output &
server_pid=$!
echo "Server pid: $server_pid"
echo "Output: $output"
echo "Wait:"
until grep -q -i 'Something 3' $output
do
if ! ps $server_pid > /dev/null
then
echo "The server died" >&2
exit 1
fi
echo -n "."
sleep 1
done
echo
echo "Server is running!"
}
server()
{
i=0
while true; do
let i++
echo "Something $i"
sleep 1
done
}
main "$@"