等待前台進程發出字串,然後傳送到後台

等待前台進程發出字串,然後傳送到後台

使用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

這個想法是在後台運行伺服器,然後只要出現預期的字串'Something 3''Server Initialized'在您的情況下)就 grep 其輸出

#!/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 "$@"

相關內容