Este é um estranho. Eu tenho um arquivo de texto de cerca de 5MB que é gerado através de um pipe de uníssono para um log. Se eu pesquisar o log assim, tudo bem:
grep -A1 -B1 "Nothing\|fail" /var/log/csync/logfile_20180720000001.log
Eu obtive a saída esperada para a tela, que tem 31 linhas de comprimento. No entanto, quero enviar essa saída para um email de departamentos. Devido a sendemail ser exigente sobre o que você pode colocar em seu campo de mensagem não posso fazer o seguinte "" e não posso descobrir como escapar com sendemail:
sendemail -f [email protected] -t [email protected] -u NFS Replication Report -m "$(grep -A1 -B1 "Nothing\|fail" /var/log/csync/logfile_20180720000001.log)" -s emailserver
Em vez disso, estou fazendo:
grep -A1 -B1 "Nothing\|fail" /var/log/csync/logfile_20180720000001.log | sendemail -f [email protected] -t [email protected] -u NFS Replication Report -s emailserver
Quando faço isso, recebo o e-mail, mas ele contém muito do arquivo de texto em que corri o grep, que não deveria estar enviando, não é a mesma saída do grep. Tem as primeiras 15 linhas, um monte de texto que o grep não deveria combinar, e o restante na parte inferior. A parte chata é que, se eu fizer uma busca por uma única string de dados, ela funcionará perfeitamente:
grep -A1 -B1 fail /var/log/csync/logfile_20180720000001.log | sendemail -f [email protected] -t [email protected] -u NFS Replication Report -s emailserver
ou
sendemail -f [email protected] -t [email protected] -u NFS Replication Report -s emailserver -m "$(grep -A1 -B1 fail /var/log/csync/logfile_20180720000001.log)"
Alguém tem alguma ideia?