複数のコンピュータで次のスクリプトを実行しており、一部のコンピュータでは正しく実行されていましたが、今は別のコンピュータで実行され、エラーが発生しています。
スクリプトとエラーは次のとおりです。
スクリプト:
host="$(/bin/hostname)";
qSize="$(/usr/sbin/exim -bpc)";
qLimit="100";
sTo="[email protected]";
sFr="root@"$hostname;
if [ $qSize -ge $qLimit ]; then
echo "There are "$qSize "emails in the mail queue" | sed 's/^/To: '"$sTo"'\nSubject: *ALERT* - Mail queue o
n '"$host"' exceeds limit\nFrom: '"$sFr"'\n\n/' | sendmail -t
else
echo -e "There are "$qSize "emails in the mail queue"
fi
間違い! !
sed: -e expression #1, char 79: unterminated `s' command
エラーが何であるかを知っている人はいますか?
ベストアンサー1
あなたのコード:
echo "There are "$qSize "emails in the mail queue" | sed 's/^/To: '"$sTo"'\nSubject: *ALERT* - Mail queue o
n '"$host"' exceeds limit\nFrom: '"$sFr"'\n\n/' | sendmail -t
読むのは痛いです。さらに悪いことは、読みやすいように再フォーマットしても、役に立たない使い方が奇妙でsed
完全に間違っていることです。sed
echoステートメントの出力の前に電子メールヘッダーを挿入するために使用されます。これはまったく意味がありません。
sed
簡単に言えば、ここでは使用する必要もなく、sed
ここでも使用しないでください。これは複雑さとエラーの可能性を追加するだけです。
次のようにしてください。
sendmail -t <<EOF
From: $sFr
To: $sTo
Subject: *ALERT* - Mail queue on '$host' exceeds limit
There are $qSize emails in the mail queue
EOF
または次のようになります。
subject="*ALERT* - Mail queue on '$host' exceeds limit"
message="There are $qSize emails in the mail queue"
echo "$message" | sendmail -f "$sFR" -s "$subject" "$sTO"
そう:
{
echo "From: $sFr"
echo "To: $sTo"
echo "Subject: *ALERT* - Mail queue on '$host' exceeds limit"
echo
echo "There are $qSize emails in the mail queue"
} | sendmail -t
でもこれが良いです:
echo "From: $sFr
To: $sTo
Subject: *ALERT* - Mail queue on '$host' exceeds limit
There are $qSize emails in the mail queue" | sendmail -t
簡単に言えば、複数行のテキストを他のプログラム(この場合)にパイプで接続するほとんどすべての方法が、現在sendmail
実行中の作業よりも優れています。