変数の内容をコマンドとして直接入力しようとすると、あいまいなリダイレクトが発生します。

変数の内容をコマンドとして直接入力しようとすると、あいまいなリダイレクトが発生します。

私は私が実行しているさまざまなNodeサーバーのhttp応答をテストし、Nginxで502エラー応答(1つ以上のサーバーがクラッシュしたことを意味)がある場合は、私に電子メールを送信するスクリプトを作成しようとしています。

私のアプローチはシェルスクリプトを作成してクローンジョブとして実行することです。ssmtpを使用してGmailを介してメッセージを送信します。以下はスニペットです。

messageTemplate=`cat /home/sites/mailmsg.txt`
...
email="$messageTemplate One or more sites is down!"
mailCommand=`mail -s [email protected] < $email`

ssmtpメールテンプレート(受信者:、送信者:など)の内容を問題なくインポートできます。私はメールラインがうまく接続されていると確信しています。問題は、mailCommand行が次の行で失敗することです。

line 31: $email: ambiguous redirect

mail基本的に、messageTemplate +カスタムメッセージを最初のコマンド(この場合)にパイプする正しい方法は何ですか?

答え1

私の修正ビーズは、あなたのメッセージテキストに次のいずれかまたはいずれかを<含めることができると思います>

私が見るにはあなたの用途が正しいと思います。

mailCommand=`mail -s [email protected] < $email`

必要に応じて実行されません。これは$emailファイル名で内容を取り、($emailいくつかの単語が含まれているのでやや失敗します)、その内容を読み取ろうとし、その内容をcommandに入れてから、コマンドmailの出力をmail次に割り当てます。変数mailCommand

私の考えでは、あなたは次のようなものが欲しいということです

echo "$email" | mail -s [email protected]

つまり、変数に文字列を取得してemailメーラーに供給しますか?

(しかし、今では多くの人が逆$(foo)引用符の代わりにコマンド置換表記を好む。)

答え2

messageTemplate=`cat /home/sites/mailmsg.txt`
...
mailCommand=`echo "$messageTemplate One or more sites is down"\! | mail -s [email protected]`

または

email="$messageTemplate One or more sites is down"\!
mailCommand=`echo "$email" | mail -s [email protected]`

関連情報