Я обнаружил, что вызов команды 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
Оба эти варианта должны решить проблему.