Скрипт оболочки зависает при выполнении команды mail

Скрипт оболочки зависает при выполнении команды mail

Я обнаружил, что вызов команды mail приводит к остановке скрипта без ошибок. Чтобы закрыть скрипт, мне нужно нажать ctrl-c или выполнить команду kill на идентификаторе процесса.

Соответствующий раздел сценария приведен ниже:

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

При запуске я вижу текст "отправка почты далее..." и ничего больше. Он никогда не возвращается к приглашению.

Я вижу, что скрипт все еще находится в памяти с помощью ps -ax | grep myscript.sh.

Я пробовал использовать кавычки вокруг темы и электронной почты, и снова без. В любом случае получается тот же результат.

Что я делаю не так?

решение1

Программа mailожидает, что пользователь введет сообщение на стандартный ввод (завершается EOF ( Ctrl-D)). Вы не перенаправляете stdin, программа ждет ввода. Вы можете перенаправить из /dev/null(для пустого сообщения), из файла-консерва или из конвейера, например:

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

или

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

Оба эти варианта должны решить проблему.

Связанный контент