Monitorar e atuar condicionalmente na saída contínua do comando

1

No bash, tenho um comando em execução na tela que é efetivamente:

while true
do
  echo $RANDOM
  sleep 1
done

A saída é:

12396
19683
31641
...

Gostaria de canalizar isso para algo como grep / awk e corresponder a um padrão específico, como 12345 , quero que um comando seja executado.

Eu não quero capturar a saída completa do comando em execução - ele pode ser executado por um longo tempo antes que uma correspondência seja encontrada e eu não quero desperdiçar espaço na máquina.

Isso pode ser feito facilmente no bash?

Em um mundo ideal, eu também gostaria que a saída continue a ser impressa no terminal, para que eu possa acessar e monitorar a saída sozinho, mas isso não é estritamente necessário.

    
por dave mankoff 28.12.2017 / 22:16

1 resposta

1
./feeding_script.sh |
tee >(while read a; do [ "$a" == "12345" ] && </dev/null another_command; done)

Notas:

  • tee divide o fluxo de dados; uma cópia vai para um "arquivo" que é, neste caso, um comando >(…) , o outro continua para o terminal;
  • </dev/null another_command - esse redirecionamento impede que another_command consumam dados gerados por feeding_script.sh .
por 28.12.2017 / 22:45