Bash

為什麼 sendmail 在不同的 shell 中工作方式不同?

  • January 30, 2013

以下程式碼在我直接在bashshell 中執行時有效:

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作為一種更便攜的方式來執行此操作。

引用自:https://unix.stackexchange.com/questions/63066