bash에서 var에 여러 줄 출력을 할당할 때 줄 바꿈을 활성화합니다.

bash에서 var에 여러 줄 출력을 할당할 때 줄 바꿈을 활성화합니다.

저는 웹에서 복사한 다음과 같은 매우 기본적인 쉘 스크립트를 사용하여 데이터베이스 백업 폴더의 내용을 나열하고 정기적으로 메일로 보냅니다.

MYSQLLIST=$(ls -lhG /var/backups/mysql/daily/)
SUBJECT="daily backup finished"
EMAIL="logging@localhost"
EMAILMESSAGE="/tmp/emailmessage.txt"
echo "dailybackup.sh ran successfully" > $EMAILMESSAGE
echo "MYSQL:" >> $EMAILMESSAGE
echo $MYSQLLIST >> $EMAILMESSAGE
mail -s "$SUBJECT" "$EMAIL" < $EMAILMESSAGE

그러나 메일 리더와 관계없이 내가 받은 메일에는 줄 사이에 줄바꿈이 없기 ls때문에 메시지를 읽기가 매우 어렵습니다. ls -lhG쉘에서 실행할 때 얻는 것과 동일한 개행 문자를 어떻게 생성할 수 있습니까 ?

답변1

변수를 채우는 명령 대체를 제거한 다음 이를 에코하고 직접 출력을 ls메시지 파일로 리디렉션합니다.

SUBJECT="daily backup finished"
EMAIL="logging@localhost"
EMAILMESSAGE="/tmp/emailmessage.txt"
echo "dailybackup.sh ran successfully" > $EMAILMESSAGE
echo "MYSQL:" >> $EMAILMESSAGE
ls -lhG /var/backups/mysql/daily/ >> $EMAILMESSAGE
mail -s "$SUBJECT" "$EMAIL" < $EMAILMESSAGE

편집하다: 이 스크립트를 더 정리하면 다음과 같이 정확히 동일한 결과를 얻을 수 있습니다.

(
    echo "dailybackup.sh ran successfully"
    echo "MYSQL:"
    ls -lhG /var/backups/mysql/daily/
) | mail -s "Daily backup finished" "logging@localhost"

이는 서브셸에서 일부 명령을 실행한 다음 mail임시 파일을 작성하지 않고 서브셸의 전체 출력을 직접 가져옵니다.

관련 정보