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これを行うには、より移植性の高い方法を試すことができます。

おすすめ記事