
私のBashスクリプトには次のエントリがあります。
echo "Please see attached file" | mailx -S smtp=$smtpServer -s "Subject of the mail" -a $logfile -r "[email protected]" [email protected] [email protected]
メールを送信するときにエラーがない場合は正常に動作しますが、エラーがある場合はmailxはエラーメッセージを表示し、ユーザーがEnterキーを押すのを待ちます。これをどのように避けることができますか?ユーザーがEnterキーを押すのを待つべきではありません。
答え1
通常、非対話モードでアプリケーションスイッチを使用するか、それに対するエラーを抑制しようとします。mailx
しかし、文書を少し見た後でも、明確な内容が見つかりませんでした。
これを行うより一般的な方法は、timeout
指定されたコマンドを実行し、指定されたタイムアウト後も実行を続けている場合は、それを終了するコマンドを使用することです。
たとえば、あなたの場合、コマンドは次のようになります。
echo "Mail body" | timeout 15s mailx ${MAILX_OPTIONS}
15秒後もコマンドが実行され続けると、コマンドは終了しますmailx
。これは、継続的なエラーメッセージがある場合にのみ発生します。
答え2
重大なハッキングカテゴリのソリューションでは、必要に応じて表示され、そうでない場合は削除される不要なキャリッジリターンが送信されます。
{ echo "Please see attached file"; echo; } | mailx ...
答え3
することができます予想されるシェルはプロンプトを見つけて応答メッセージを送信できるように監視します。
#!/usr/bin/expect
spawn COMMAND
expect "PROMPT"
send "RESPONSE\n";
interact