비어 있으면 함수 호출에 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는 입력을 기다립니다.

나만 그렇다면 함수가 제대로 작동하려면 항상 표준 입력에 대한 무언가가 필요하다는 것을 알고 있지만 나보다 기술적인 지식이 부족한 사람들도 쉽게 사용할 수 있는지 확인해야 합니다.

사용 가능한 경우 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

관련 정보