
Com um bash
script, estou tentando iniciar um processo, espero que ele escreva uma string específica stdout
(ou seja 'Server Initialized'
), envie-o para segundo plano e continue com o script. Melhor ainda se, uma vez 'Server Initialized'
impresso, a saída do processo for ignorada (redirecionada para /dev/null
?)
Como um hack agora, estou esperando 10 segundos e presumindo que o servidor foi iniciado.
( ./long_running_process ) > /dev/null 2>&1 &
# sleep 10
echo 'I run after long_running_process prints "Server Initialized"
Pontos de bônus se, após algum tempo limite, a string de pesquisa não aparecer, saia com um código de status de erro.
Responder1
A idéia é executar o servidor em segundo plano e, em seguida, executar o grep em sua saída, desde que a string esperada apareça 'Something 3'
( 'Server Initialized'
no seu caso)
#!/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 "$@"