スクリプトがあるコンピュータで正常に実行され、他のコンピュータでエラーが発生します。

スクリプトがあるコンピュータで正常に実行され、他のコンピュータでエラーが発生します。

複数のコンピュータで次のスクリプトを実行しており、一部のコンピュータでは正しく実行されていましたが、今は別のコンピュータで実行され、エラーが発生しています。

スクリプトとエラーは次のとおりです。

スクリプト:

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完全に間違っていることです。sedechoステートメントの出力の前に電子メールヘッダーを挿入するために使用されます。これはまったく意味がありません。

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実行中の作業よりも優れています。

おすすめ記事