Ative as quebras de linha ao atribuir saídas de várias linhas a var no bash

2

Estou usando o seguinte shell script muito básico que copiei da rede para listar o conteúdo da minha pasta de backup do banco de dados e enviá-las por e-mail regularmente:

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

No entanto - independentemente do leitor de e-mail - no e-mail que recebo, não há quebras de linha entre as linhas da ls output, o que torna a mensagem muito difícil de ler. Como eu poderia produzir quebras de linha idênticas àquelas que eu recebo ao executar ls -lhG no shell?

    
por Morris 25.08.2011 / 09:46

1 resposta

3

Tente soltar o comando sutstitution que recheia uma variável e, em seguida, faz o eco de volta e apenas redireciona a saída de ls diretamente para o arquivo de mensagens.

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

Editar : você pode limpar ainda mais esse script exatamente com o mesmo resultado assim:

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

Isso executa alguns comandos em um subshell e direciona toda a saída do subshell diretamente para mail , sem a necessidade de escrever um arquivo temporário.

    
por 25.08.2011 / 09:55