Eu tento fazer o seguinte em um script Bash: execute um comando (como tail -f log_file
), espere até que uma saída específica chegue, então pare o comando e continue com o script.
Eu tentei o seguinte, mas não funcionou:
tail -f log_file | grep some_text | head -n1
Eu não tenho saída dessa maneira.
Agora, tentei diagnosticar o problema. Quando simplesmente executo tail -n1
, depois digito algo no terminal, ele sai depois da primeira linha. No entanto, se eu executar o seguinte:
grep some_text | head -n1
Nesse caso, não recebo saída até que eu pressione CTRL + D e, em seguida, imprima a primeira linha da entrada contendo some_text
.
Minha pergunta é: por que isso acontece? Se head
produzir a primeira linha imediatamente no primeiro caso, por que ela não faz quando recebe a entrada de um cano? Não deveria dar saída a tudo para as primeiras linhas n , depois sair, enviando um sinal SIGPIPE para a outra extremidade do canal?