Linux에서 mail 명령을 사용할 때 이메일 본문에 여러 줄을 어떻게 에코합니까?

Linux에서 mail 명령을 사용할 때 이메일 본문에 여러 줄을 어떻게 에코합니까?

"아래는 전송된 파일 목록입니다"라는 메시지와 함께 일부 파일 이름 목록(find 명령의 결과)을 이메일 본문에 보내야 합니다. 이 메시지를 위의 찾기 결과와 메시지 본문에 병합하려면 어떻게 해야 합니까?

전임자:

echo "Below are list of files transfered" | mail -s "$some_subject" $some_mail_id

find . -maxdepth 1 -type f -name $(echo ${FILE_ARR[@]}| sed 's/ / -o -name /g') | \
  mail -s "$some_subject" $some_mail_id

위의 명령을 개별적으로 실행할 수는 있지만 하나로 결합할 수는 없습니다.

도와주세요. 감사해요.

답변1

(괄호를 사용하여 여러 명령을 하위 쉘로 그룹화한 )다음 하위 쉘의 출력을 mail.

예를 들어("below..." 텍스트 뒤에 몇 가지 추가 줄바꿈 포함):

( printf '%s\n\n\n' "Below are list of files transfered"
  find . -maxdepth 1 -type f -name $(echo ${FILE_ARR[@]}| sed 's/ / -o -name /g')
) | mail -s "$some_subject" "$some_mail_id"

또는 find 명령이 필요하지 않은 경우(그리고 그럴 것 같지 않은 경우):

( printf '%s\n\n\n' "Below are list of files transfered"
  printf '%s\n' "${FILE_ARR[@]}"
) | mail -s "$some_subject" "$some_mail_id"

답변2

이것은 오래된 스레드이지만 여러 줄로 된 메시지를 보내는 것에 대한 간단한 대안이 있습니다. 흥미롭게도 원하는 주석, 명령, 변수를 추가할 수 있습니다. "<<EOF"와 "EOF" 사이의 모든 내용은 메시지의 일부로 간주됩니다.

mail -s "Subject" [email protected] <<EOF
Current date: $(date)
Here is the list of transfered files:

$(command 1; command 2 ; ... ; command n)

(This is an automated message. Bla bla bla...)
EOF

관련 정보