我正在尝试创建一个像这样的 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 也会等待输入。
如果只是我,我只知道该函数总是需要在标准输入上有一些东西才能正常工作,但我需要确保它对于技术水平不如我的人来说很容易使用。
有没有办法将其设置为使用标准输入(如果可用)并使用 /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