bash
쉘에서 직접 다음 코드를 실행하면 작동합니다.
SUBJECT="SUBJECT-"`date`;
MAIL_FROM="[email protected]";
MAIL_TO="[email protected]";
MAIL_CC="[email protected]";
MAIL_FILE="/path/of/html/body.html";
(echo -e "Subject: $SUBJECT\nMIME-Version: 1.0\nFrom: $MAIL_FROM\nTo:$MAIL_TO\nCc:$MAIL_CC\nContent-Type: text/html\nContent-Disposition: inline\n\n";/bin/cat $MAIL_FILE) | /usr/sbin/sendmail -f $MAIL_FROM $MAIL_TO;
그런데 아래와 같은 스크립트로 실행하려고 하면...
mail.sh의 내용:
#!/usr/bin/ksh
SUBJECT="SUBJECT-"`date`;
MAIL_FROM="[email protected]";
MAIL_TO="[email protected]";
MAIL_CC="[email protected]";
MAIL_FILE="/path/of/html/body.html";
(echo -e "Subject: $SUBJECT\nMIME-Version: 1.0\nFrom: $MAIL_FROM\nTo:$MAIL_TO\nCc:$MAIL_CC\nContent-Type: text/html\nContent-Disposition: inline\n\n";/bin/cat $MAIL_FILE) | /usr/sbin/sendmail -f $MAIL_FROM $MAIL_TO;
나는 다음과 같은 결과를 얻습니다 ...
$ sh mail.sh #Mail sent but the body is in text format containing "-e Subject: SUBJECT-Wed Jan 30 04:45:42 EST....."
텍스트로 렌더링된 HTML 코드.
$ bash mail.sh # Mail is received with mail body containing correct HTML format.
bash가 그것을 인식하는 것 같습니다 echo -e
. 그러나 "#!/usr/bin/bash"를 사용하고 스크립트를 실행하면 $ sh mail.sh
여전히 텍스트 형식의 메일을 받습니다.
왜 이런 일이 일어나는 걸까요..?귀하의 조언에 미리 감사드립니다.
답변1
솔라리스echo
$ echo -e foo
-e foo
대부분의 다른 명령 처럼echo
작동하지 않습니다 .
$ bash
$ echo -e foo
foo
$ which echo
/usr/bin/echo
$ type -t echo
builtin
내장 bash
버전은 예상대로 작동하며 ksh
내장 버전은 Solaris 동작을 유지합니다(옵션을 사용할 때 동작은 일반적으로 시스템에 따라 다릅니다 echo
). ksh
보통은 echo
작동해야 합니다. 아니요:ksh
-e
$ ksh
$ echo -e "foo\nbar"
-e foo
bar
$ echo "foo\nbar"
foo
bar
그래서 당신은솔라리스질문, 하나도 아니고이메일을 보내질문:-)
printf
이 작업을 수행하려면 좀 더 이식성이 뛰어난 방법을 시도해 볼 수 있습니다 .