web-dev-qa-db-ja.com

Sendmailがbashスクリプトで希望どおりに機能しない

これは、cronジョブとして実行されるbashスクリプトにあるコードです。 cronジョブはルートとして実行されます。

   /usr/sbin/sendmail [email protected]<<EOF
   subject:Backup Error!
   from:backup@server01
   $error
        EOF

この後にコードがあり、私が受け取るメールは次のとおりです。

マシンのrootユーザーから。

メッセージには以下が含まれます。

   subject:Backup Error!
   from:backup@server01
   $error
        EOF
   More code...
   that is in the script
   all the way to the end...

私は他のバリエーションを試しましたが、これが一番近いです。これを通常のスクリプトで試したところ、正常に機能しました。何が起こっているのか、件名とフォームの送信者を指定してこのメ​​ールを送信するにはどうすればよいですか?

1
Dan

以前の回答はすでに言及しています:

  • 「hereドキュメント」の終わり(END)
  • ヘッダーと本文の間に空の行がありません

追加の修正:

  • -iコマンド行オプションは、ドットで始まる行の特別な処理を停止します
  • --は、受信者のアドレスからコマンドラインオプションを分離します(推奨スタイル)

修正されたスクリプト:

/usr/sbin/sendmail -i -- [email protected] <<EOF
subject: Backup Error!
from:backup@server01

$error
EOF
2
AnFi

Sendmail(および一般的には電子メール)は、ヘッダーと本文の間に空白行が必要です。次の例が機能しました。

$ sendmail [email protected] <<EOF
> subject: testing
> from: [email protected]
> 
> This is my body!
> EOF

(明らかに、そこに>sを貼り付けても機能しません。ヘッダーとエラーメッセージの間に空白行があるように、実行内容を変更するだけです)。

1
Oli

2番目の制限文字列EOFの前または後に空白文字を使用しないことをお勧めします。制限文字列の前または後ろにスペースを1つだけ使用すると、その特殊な目的のコードブロックは機能しなくなります。したがって、次のみを使用します。

EOF

この意味で 第19章Here Documents のようなbashスクリプトガイドを読む必要があります。

1
Radu Rădeanu