다음과 같은 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