フォアグラウンドプロセスが文字列をエクスポートしてからバックグラウンドに送信するのを待ちます。

フォアグラウンドプロセスが文字列をエクスポートしてからバックグラウンドに送信するのを待ちます。

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 "$@"

関連情報