Shell script hangs on mail command

mail-commandshellshell-script

I'm finding that a call to the mail command is causing a script to suspend without error. To close the script I have to ctrl-c or issue a kill command on the process id.

The pertinent section of the script is below:

EMAIL_TO="my@email.com"

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?"

When running this, I'm seeing the text "sending mail next…" and nothing more. It never returns to prompt.

I can see the script is still in memory with ps -ax | grep myscript.sh.

I've tried using quotes around the subject and email, and again without. The same result is produced either way.

What am I doing wrong?

Best Answer

The mail program expects the user to type the message on its standard input (terminated by EOF (Ctrl-D)). You are not redirecting stdin, the program is waiting for input. You can either redirect from /dev/null (for an empty message), from a canned file, or from a pipe, for example:

echo Hi, just sending you a message | mail -s "pdfbackup" "$EMAIL_TO"

or

mail -s "pdfbackup" "$EMAIL_TO" < /dev/null

Both of these should clear up problem.

Related Question