여러 파일이 첨부된 경우 Unix 메일에서 첨부 파일이 누락됨

여러 파일이 첨부된 경우 Unix 메일에서 첨부 파일이 누락됨

명령 의 결과인 Unix에서 여러 파일을 첨부하려고 합니다 find. 메일을 보내려고 하는데 첨부파일이 없어졌습니다.

dir=$path
echo "Entered into $spr/sum_master"
for fil in `find $dir -ctime -2 -type f -name "Sum*pdf*"`
do
  uFiles=`echo "$uFiles ; uuencode $fil  $fil"`
done
\($uFiles\) | mailx -s "subject" [email protected]

이 코드에 어떤 문제가 있나요?

답변1

uFiles문자열을 포함하게 되면 마지막 foo bar qux줄에서는 (foo인수 bar및 를 사용하여 명령을 실행합니다 qux). 이로 인해 오류 메시지 (foo: command not found(또는 유사한 메시지)가 발생하고 mail빈 입력을 얻습니다.

스크립트의 문제는 이뿐만이 아닙니다. 변수를 구성하는 명령은 uFiles사용자가 생각하는 것과 전혀 작동하지 않습니다. 실행하여 bash -x /path/to/script스크립트의 흔적을 확인하면 무슨 일이 일어나고 있는지 알 수 있습니다. 명령을 실행하는 대신 명령을 echo실행하고 있습니다 . 거기에는 uuencode필요하지 않습니다 echo.

  uFiles="$uFiles
  $(uuencode "$fil" "$fil")"

이렇게 하면 루프가 작동하지만 깨지기 쉽습니다. 특히, 공백이나 기타 특수 문자가 포함된 파일 이름에서는 중단됩니다(참조:쉘 스크립트가 공백이나 기타 특수 문자로 인해 막히는 이유는 무엇입니까?자세한 설명은) 출력을 구문 분석하는 것이 find작업을 수행하는 가장 쉬운 방법은 아닙니다. 대신 find실행하려는 명령을 실행하라고 지시하세요.

find "$dir" -ctime -2 -type f -name "Sum*pdf*" -exec uuencode {} {} \;

그 출력은 빌드하려고 했던 uuencoded 파일을 연결한 것입니다. 다음 항목에 직접 입력으로 전달할 수 있습니다 mail.

find "$dir" -ctime -2 -type f -name "Sum*pdf*" -exec uuencode {} {} \; |
mailx -s "subject" [email protected]

uuencode 단계의 잠재적인 실패를 감지하려면 이를 변수에 넣을 수 있습니다(단, 매우 클 수 있다는 점에 유의하세요).

attachments=$(find "$dir" -ctime -2 -type f -name "Sum*pdf*" -exec uuencode {} {} \;)
if [ $? -ne 0 ]; then
  echo 1>&2 "Error while encoding attachments, aborting."
  exit 2
fi
if [ -z "$attachments" ]; then
  echo 1>&2 "Notice: no files to attach, so mail not sent."
  exit 0
fi
echo "$attachments" | mailx -s "subject" [email protected]

또는 임시 파일을 작성하십시오.

attachments=
trap 'rm -f "$attachments"' EXIT HUP INT TERM
attachments=$(mktemp)
find "$dir" -ctime -2 -type f -name "Sum*pdf*" -exec uuencode {} {} \; >"$attachments"
if [ $? -ne 0 ]; then
  echo 1>&2 "Error while encoding attachments, aborting."
  exit 2
fi
if ! [ -s "$attachments" ]; then
  echo 1>&2 "Notice: no files to attach, so mail not sent."
  exit 0
fi
mailx -s "subject" [email protected] <"$attachments"

관련 정보