Estou descobrindo que uma chamada para o comando mail está fazendo com que um script seja suspenso sem erros. Para fechar o script, preciso pressionar Ctrl-C ou emitir um comando kill no ID do processo.
A seção pertinente do script está abaixo:
EMAIL_TO="[email protected]"
if [ -f /www/archives/pdf/pdf_201207021048.tar ]; then
echo "file exists"
else
echo "file does not exist"
fi
echo "sending mail next..."
mail -s "pdfbackup" "$EMAIL_TO"
echo "mail sent?"
Ao executar isso, vejo o texto "enviando email em seguida..." e nada mais. Ele nunca retorna ao prompt.
Posso ver que o script ainda está na memória com ps -ax | grep meuscript.sh.
Tentei usar aspas em torno do assunto e do e-mail, e novamente sem. O mesmo resultado é produzido de qualquer maneira.
O que estou fazendo de errado?
Responder1
O mail
programa espera que o usuário digite a mensagem em sua entrada padrão (terminada por EOF ( Ctrl-D)). Você não está redirecionando o stdin, o programa está aguardando entrada. Você pode redirecionar de /dev/null
(para uma mensagem vazia), de um arquivo pré-definido ou de um canal, por exemplo:
echo Hi, just sending you a message | mail -s "pdfbackup" "$EMAIL_TO"
ou
mail -s "pdfbackup" "$EMAIL_TO" < /dev/null
Ambos devem resolver o problema.