É possível executar um comando no bash e iniciar outro com base na saída do primeiro?

É possível executar um comando no bash e iniciar outro com base na saída do primeiro?

Eu criei um alias

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

para iniciar um servidor web e depois abrir a página que é servida pelo servidor. Mas o segundo comando não será executado até que o primeiro comando seja concluído.

Existe uma maneira de executar o comando e, em seguida, começar a executar um segundo, sempre que o primeiro gerar uma determinada string?

O segundo comando deve ser capaz de ver que o primeiro comando é impresso WEBrick::HTTPServer#start, o que significa que o servidor já está em execução e antes de iniciar.

Responder1

Isso é derivado desta resposta em stackoverflow.com:

Essencialmente,

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

O também 2>&1é necessário quando você deseja capturar stderra saída; se não quiser, deixe-o de fora.


No seu caso, isso deve funcionar:

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

informação relacionada