次のようなBash関数を作成しようとしています。
function send_email {
local DEFAULT_EMAIL='[email protected]'
local email_subject="${1:-No subject line set, please check $0 on $(hostname -f)}"
local email_from="${2:-$DEFAULT_EMAIL}"
local email_to="${3:-$DEFAULT_EMAIL}"
mailx -s "$email_subect" -r "$email_from" "$email_to"
}
stdin() で呼び出すとうまくecho foo | send_email "bar"
機能し、mailx は stdin を受け取り、メールを送信するとメールがうまく届きます。しかし、標準入力に何もない場合、-Eが設定されていてもmailxは入力を待ちます。
もしそうなら、関数が正常に機能するためには常に標準入力のために何かが必要であることを知っていますが、私よりも技術的な知識がない人も簡単に利用できることを確認する必要があります。
利用可能な場合はstdinを使用し、stdinが空の場合は/ dev / nullを有効にする方法はありますか?
ベストアンサー1
if dd of=stdindata iflag=nonblock >/dev/null 2>&1; then
mailx -s "$email_subect" -r "$email_from" "$email_to" <stdindata
else
mailx -s "$email_subect" -r "$email_from" "$email_to" </dev/null
fi