Mailx -E 플래그가 실패했습니다.

Mailx -E 플래그가 실패했습니다.

-E 플래그와 함께 mailx 명령을 사용하고 있습니다. 이것이 Linux 매뉴얼 페이지에 나와 있는 내용입니다.

-E     If an outgoing message does not contain any text in its first or
              only message part, do not  send  it  but  discard  it  silently,
              effectively   setting  the  skipemptybody  variable  at  program
              startup.  This is  useful  for  sending  messages  from  scripts
              started by cron(8)

. AIX 서버에서 -E 플래그를 사용할 수 없는 이유는 무엇입니까? 어떤 아이디어가 있나요? 아니면 제가 사용할 수 있는 대체품이 있나요? 이게 대본이에요`

#!/usr/bin/env bash
shopt -s nullglob #to make `("$src_dir"*.300)` works
src_dir="/exports/files/" #don't forget trailing slash /
dest_dir="/exports/files/arch/" #don't forget trailing slash /
err_f="/tmp/error.txt"
mv_f="/tmp/moved.log" #record moved file in case network down
email="[email protected]"
touch "$err_f" #bcoz we use >> apppend
touch "$mv_f" #bcoz we use tee -a append
if [ ! -d "$src_dir" ]; then echo|mailx -s "Error: directory $src_dir not exist" "$email" 2>>"$err_f"; exit 1; fi
if [ ! -d "$dest_dir" ]; then echo|mailx -s "Error: directory $dest_dir not exist" "$email" 2>>"$err_f"; exit 1; fi
{
f=("$src_dir"*.300)
for ((i=0; i < ${#f[@]}; i+=1)); do
        mv -f "${f[i]}" "$dest_dir"  2>>"$err_f"; #-f do not prompt
        if [ $? -eq 0 ]; then
                if [ "$i" -eq 0 ]; then echo "$(date +"%Y-%m-%d %H:%M:%S")"; echo "The following files has been moved from $src_dir to $dest_dir"; echo; fi
                echo "$((i+1))." "$(basename "${f[i]}")" 'moved'; echo;
        else
                 echo| mailx -s "Error:  $(<"$err_f")" "$email" 2>>"$err_f"; break
        fi
done
} | tee -a "$mv_f" | mailx -E -s "The following files has been moved" "$email" 2>>"$err_f"

-E 플래그를 제거할 수 있는 방법이 있습니까? 이를 제거하면 텍스트 없이 빈 메시지가 전송됩니다. 나는 그것을 억제하고 싶다. 어떻게 든 -E 플래그가 내 서버에서 작동하지 않습니다

답변1

입력이 충분하지 않으면 테스트하고 전송하면 충분합니다.너무 큰임시 디렉토리용. test -s파일 크기가 0이 아닌지 확인하십시오 .

.... > "${TMPDIR:-/tmp}/mail.$$.tmp"    # Write to temporary file

test -s "${TMPDIR:-/tmp}/mail.$$.tmp" && mailx ... < "${TMPDIR:-/tmp}/mail.$$.tmp"   # Send email if non-zero
rm -f "${TMPDIR:-/tmp}/mail.$$.tmp"     # Delete temporary file

특정 인스턴스에서는 마지막 줄이 변경됩니다.

} | tee -a "$mv_f" | mailx -E -s "다음 파일이 이동되었습니다." "$email" 2>>"$err_f"

이와 관련하여:

} | tee -a "$mv_f" > "${TMPDIR:-/tmp}/mail.$$.tmp"

test -s "${TMPDIR:-/tmp}/mail.$$.tmp" &&
    mailx -s "The following files has been moved" "$email" < "${TMPDIR:-/tmp}/mail.$$.tmp" 2>>"$err_f"
rm -f "${TMPDIR:-/tmp}/mail.$$.tmp"

관련 정보