O script Shell trava no comando mail

O script Shell trava no comando mail

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 mailprograma 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.

informação relacionada