Bash

如果為空,則使用標準輸入或 /dev/null 呼叫函式

  • November 18, 2021

我正在嘗試製作這樣的 Bash 函式:

function send_email {
 local DEFAULT_EMAIL='Something@Somplace.com'
 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"
}

如果我在標準輸入()上呼叫它echo foo | send_email "bar",它工作正常,mailx 拿起標準輸入並發送郵件,它到達就好了。但是,如果 stdin 上沒有任何內容,則即使設置了 -E,mailx 也會等待輸入。

如果只是我,我只知道該功能總是需要在標準輸入上有一些東西才能正常工作,但我需要確保這對於技術含量低於我自己的人來說很容易使用。

有沒有辦法安裝它以使用標準輸入(如果可用)並使用 /dev/null 如果標準輸入為空?

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

引用自:https://unix.stackexchange.com/questions/678155