在 bash 中将多行输出分配给 var 时启用换行符

在 bash 中将多行输出分配给 var 时启用换行符

我使用以下从网上复制的非常基本的 shell 脚本来列出数据库备份文件夹的内容并定期邮寄它们:

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在 shell 上执行时得到的换行符相同的换行符?

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

这会在子 shell 中运行一些命令,然后将子 shell 的整个输出直接导入,而mail无需编写临时文件。

相关内容