
스크립트를 사용하여 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 "$@"