¿Es posible ejecutar un comando en bash e iniciar otro según el resultado del primero?

¿Es posible ejecutar un comando en bash e iniciar otro según el resultado del primero?

Creé un alias

alias rubyserver='ruby -run -e httpd -- -p 5000 . && open localhost:5000'

para iniciar un servidor web y luego abrir la página servida por el servidor. Pero el segundo comando no se ejecutará hasta que finalice el primer comando.

¿Hay alguna manera de ejecutar el comando y luego comenzar a ejecutar un segundo, siempre que el primero haya generado una determinada cadena?

El segundo comando debe poder ver que el primer comando imprime WEBrick::HTTPServer#start, lo que significa que el servidor ya está ejecutándose y antes de comenzar.

Respuesta1

Esto se deriva de esta respuesta en stackoverflow.com:

Esencialmente,

one_command 2>&1 | tee >(grep -Fq keyword && other_command)

También es 2>&1necesario cuando desea capturar stderrla salida; si no lo desea, omítalo.


En tu caso esto debería funcionar:

ruby -run -e httpd -- -p 5000 . 2>&1 \
  | tee >(grep -Fq 'WEBrick::HTTPServer#start' && open localhost:5000) 

información relacionada