
Con un bash
script en el que estoy intentando iniciar un proceso, espero a que escriba una cadena específica stdout
(es decir 'Server Initialized'
), luego lo envío a un segundo plano y continúo con el script. Aún mejor si una vez 'Server Initialized'
impreso el resultado del proceso se ignora (¿se redirige a /dev/null
?)
Como truco, en este momento estoy esperando 10 segundos y asumiendo que el servidor se ha iniciado.
( ./long_running_process ) > /dev/null 2>&1 &
# sleep 10
echo 'I run after long_running_process prints "Server Initialized"
Puntos de bonificación si, después de un tiempo de espera, la cadena de búsqueda no aparece, salga con un código de estado de error.
Respuesta1
La idea es ejecutar el servidor en segundo plano y luego registrar su salida siempre que aparezca la cadena esperada 'Something 3'
( 'Server Initialized'
en su 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 "$@"