나는 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
사용자가 표준 입력( Ctrl-DEOF( )으로 종료)에 메시지를 입력할 것으로 예상합니다. 표준 입력을 리디렉션하지 않고 프로그램이 입력을 기다리고 있습니다. /dev/null
빈 메시지의 경우 고정 파일 또는 파이프에서 리디렉션 할 수 있습니다 . 예를 들면 다음과 같습니다.
echo Hi, just sending you a message | mail -s "pdfbackup" "$EMAIL_TO"
또는
mail -s "pdfbackup" "$EMAIL_TO" < /dev/null
이 두 가지 모두 트릭을 수행해야 합니다.