
С помощью 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 "$@"