![bash에서 var에 여러 줄 출력을 할당할 때 줄 바꿈을 활성화합니다.](https://linux55.com/image/17464/bash%EC%97%90%EC%84%9C%20var%EC%97%90%20%EC%97%AC%EB%9F%AC%20%EC%A4%84%20%EC%B6%9C%EB%A0%A5%EC%9D%84%20%ED%95%A0%EB%8B%B9%ED%95%A0%20%EB%95%8C%20%EC%A4%84%20%EB%B0%94%EA%BF%88%EC%9D%84%20%ED%99%9C%EC%84%B1%ED%99%94%ED%95%A9%EB%8B%88%EB%8B%A4..png)
저는 웹에서 복사한 다음과 같은 매우 기본적인 쉘 스크립트를 사용하여 데이터베이스 백업 폴더의 내용을 나열하고 정기적으로 메일로 보냅니다.
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
임시 파일을 작성하지 않고 서브셸의 전체 출력을 직접 가져옵니다.