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