Você precisa substituir o |
por &&
ou deixar o script gerar os dados para o stdout e usar |
.
Ao usar &&
, o comando mail
só será executado quando o script sair com 0.
Ao usar o caractere pipe, seu script precisa enviar os dados para o stdout para que o pipe possa passá-lo para mail
.
No que você escreveu, o script grava dados no arquivo e mail
lê o arquivo em paralelo - e mail
acaba lendo o arquivo antes que o script tenha escrito alguma coisa nele .