Você não está fazendo nada errado: é isso que devemos esperar.
O primeiro cat <&0
consome todo o conteúdo da entrada padrão, porque é isso que o cat
faz: lê todas as suas entradas até o final.
Quando o segundo cat <&0
é executado, não há mais nada a ser consumido na entrada padrão: o fim do arquivo já foi alcançado anteriormente.
Se, em um script de shell, você precisar fazer 2 ou mais passagens por meio de sua entrada padrão, será necessário despejá-lo em um arquivo temporário e processar o arquivo temporário quantas vezes desejar.
A criação segura de arquivos temporários em /tmp
e a certeza de que eles são descartados corretamente quando seu script é encerrado ou morre é deixada como um exercício para você: -)
A propósito, o <&0
é desnecessário e não faz nada. Sua função é apontar a entrada padrão para o descritor de arquivo 0 ... que é a entrada padrão ... que é, por definição, onde a entrada padrão já aponta! Você pode apenas fazer esse comando cat
sozinho.