![비어 있으면 함수 호출에 stdin 또는 /dev/null을 사용하십시오.](https://linux55.com/image/198553/%EB%B9%84%EC%96%B4%20%EC%9E%88%EC%9C%BC%EB%A9%B4%20%ED%95%A8%EC%88%98%20%ED%98%B8%EC%B6%9C%EC%97%90%20stdin%20%EB%98%90%EB%8A%94%20%2Fdev%2Fnull%EC%9D%84%20%EC%82%AC%EC%9A%A9%ED%95%98%EC%8B%AD%EC%8B%9C%EC%98%A4..png)
다음과 같은 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