如果为空,则使用 stdin 或 /dev/null 进行函数调用

如果为空,则使用 stdin 或 /dev/null 进行函数调用

我正在尝试创建一个像这样的 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

相关内容