Eu canalizei uma linha no script bash e quero verificar se o pipe possui dados antes de enviá-lo para um programa.
Pesquisando eu encontrei, test -t 0
mas não funciona aqui. Sempre retorna falso. Então, como ter certeza de que o tubo possui dados?
Exemplo:
echo "string" | [ -t 0 ] && echo "empty" || echo "fill"
Saída: fill
echo "string" | tail -n+2 | [ -t 0 ] && echo "empty" || echo "fill"
Saída: fill
Ao contrário da maneira canônica / padrão de testar se o pipeline anterior produziu saída? a entrada precisa ser preservada para transmiti-la ao programa. Isso generaliza Como canalizar a saída de um processo para outro, mas apenas executar se o primeiro tiver saída? que se concentra no envio de e-mail.