sendmail이 다른 쉘에서 다르게 작동하는 이유는 무엇입니까?

sendmail이 다른 쉘에서 다르게 작동하는 이유는 무엇입니까?

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이 작업을 수행하려면 좀 더 이식성이 뛰어난 방법을 시도해 볼 수 있습니다 .

관련 정보