메일 명령에서 쉘 스크립트가 중단됩니다.

메일 명령에서 쉘 스크립트가 중단됩니다.

mail 명령을 호출하면 스크립트가 오류 없이 일시 중단되는 것으로 나타났습니다. 스크립트를 닫으려면 ctrl-c를 누르거나 프로세스 ID에 대해 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

이 두 가지 모두 문제를 해결해야 합니다.

관련 정보