A tentativa de direcionar o conteúdo da variável para o comando dá redirecionamento ambíguo

1

Estou tentando escrever um script que testa a resposta http de vários servidores Node que estou executando e que me envia um email se algum responder com um erro 502 do Nginx (o que significa que um ou mais servidores falhou).

Minha abordagem é escrever um script de shell e executá-lo como uma tarefa cron e estou usando o ssmtp para enviar a mensagem pelo Gmail. Aqui está um trecho:

messageTemplate='cat /home/sites/mailmsg.txt'
...
email="$messageTemplate One or more sites is down!"
mailCommand='mail -s [email protected] < $email'

Consigo obter o conteúdo do modelo de correspondência do ssmtp (Para :, De :, etc.) sem problemas. E tenho certeza de que a linha de e-mails concatena bem. O problema é que a linha mailCommand falha com a linha:

line 31: $email: ambiguous redirect

Qual é a maneira correta de enviar o que é essencialmente messageTemplate + uma mensagem personalizada para o primeiro comando (neste caso, mail )?

    
por armadadrive 06.02.2016 / 17:05

2 respostas

3

Minha bola de cristal acha que talvez o texto da sua mensagem contenha um dos mais de < ou > .

Parece-me o seu uso

mailCommand='mail -s [email protected] < $email'

não fará o que você deseja: isso levará o conteúdo de $email como um nome de arquivo (falhando um pouco porque $email consiste em várias palavras), tente ler seu conteúdo, coloque-o no comando mail , e, em seguida, atribua a saída do comando mail à variável mailCommand .

Meu pensamento seria que você quer algo como

echo "$email" | mail -s [email protected]

i.e. pegar a string na variável email e alimentá-la no programa de email?

(Como uma nota lateral, muitas pessoas preferem atualmente a notação $(foo) para substituição de comando, em vez de backticks.)

    
por 06.02.2016 / 17:15
2
messageTemplate='cat /home/sites/mailmsg.txt'
...
mailCommand='echo "$messageTemplate One or more sites is down"\! | mail -s [email protected]'

ou

email="$messageTemplate One or more sites is down"\!
mailCommand='echo "$email" | mail -s [email protected]'
    
por 06.02.2016 / 17:16