O script shell trava no comando mail

4

Estou descobrindo que uma chamada para o comando mail está fazendo com que um script seja suspenso sem erros. Para fechar o script eu tenho que 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, estou vendo o texto "enviando e-mail próximo ..." e nada mais. Nunca retorna para o prompt.

Eu posso ver que o script ainda está na memória com ps -ax | grep myscript.sh.

Eu tentei usar aspas em torno do assunto e e-mail e novamente sem. O mesmo resultado é produzido de qualquer forma.

O que estou fazendo de errado?

    
por a coder 02.07.2012 / 19:34

1 resposta

13

O programa mail espera que o usuário digite a mensagem em sua entrada padrão (terminada por EOF ( Ctrl-D )). Você não está redirecionando stdin, o programa está aguardando entrada. Você pode redirecionar de /dev/null (para uma mensagem vazia), de um arquivo armazenado 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.

    
por 02.07.2012 / 19:50