-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"