Bash
為什麼 sendmail 在不同的 shell 中工作方式不同?
以下程式碼在我直接在
bash
shell 中執行時有效:SUBJECT="SUBJECT-"`date`; MAIL_FROM="abc@site.com"; MAIL_TO="abc@site.com"; MAIL_CC="abc@site.com"; 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="abc@site.com"; MAIL_TO="abc@site.com"; MAIL_CC="abc@site.com"; 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.
所以它似乎
echo -e
被bash認可。但是當我使用“#!/usr/bin/bash”並執行腳本時,$ sh mail.sh
我仍然會收到一封文本格式的郵件。為什麼會這樣..?提前感謝您的建議。
索拉里斯
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
所以你有一個Solaris問題,而不是sendmail問題:-)
您可以嘗試
printf
作為一種更便攜的方式來執行此操作。