Пытаться направить содержимое переменной в команду дает Ambigious Redirect

Я пытаюсь написать скрипт, который проверяет HTTP-ответ от различных серверов Node, которые у меня запущены, и который затем отправляет мне сообщения по электронной почте, если кто-либо отвечает с ошибкой 502 от Nginx (что означает, что один или несколько серверов разбился).

Мой подход заключается в том, чтобы написать shell-скрипт и запустить его как задание cron, и я использую ssmtp для отправки сообщения через Gmail. Вот фрагмент:

messageTemplate=`cat /home/sites/mailmsg.txt` ... email="$messageTemplate One or more sites is down!" mailCommand=`mail -s info@redearmedia.ca < $email` 

Я могу получить содержимое шаблона почтовой программы ssmtp (To :, From :, и т. Д.) Без проблем. И я уверен, что линия электронной почты конкатенатирует просто отлично. Проблема в том, что строка mailCommand терпит неудачу с помощью строки:

line 31: $email: ambiguous redirect

Каким образом можно подключить то, что по существу является messageTemplate + настраиваемым сообщением в первую команду (в данном случае mail )?

2 Solutions collect form web for “Пытаться направить содержимое переменной в команду дает Ambigious Redirect”

Мой хрустальный шар думает, что, может быть, ваш текст сообщения содержит еще один из < или > .

Мне кажется, что вы используете

 mailCommand=`mail -s info@redearmedia.ca < $email` 

не будет делать то, что вы хотите: это займет содержимое $email в качестве имени файла (несколько не получается, потому что $email состоит из нескольких слов), попробуйте прочитать его содержимое, pu tthose в команду mail и затем назначить вывод mail для переменной mailCommand .

Мое мышление было бы в том, что вы хотите что-то вроде

 echo "$email" | mail -s info@redearmedia.ca 

т.е. взять строку в переменной email и передать ее в почтовую программу?

(Как замечание, многие люди в настоящее время предпочитают обозначение $(foo) для замены команд, а не обратные обратные).

 messageTemplate=`cat /home/sites/mailmsg.txt` ... mailCommand=`echo "$messageTemplate One or more sites is down"\! | mail -s info@redearmedia.ca` 

или

 email="$messageTemplate One or more sites is down"\! mailCommand=`echo "$email" | mail -s info@redearmedia.ca` 
  • sed Удалить строки, заканчивающиеся на %
  • Каков стандарт для отступов в сценариях оболочки?
  • выйдите из сценария, если строка ls не нашла соответствия
  • Работает ли работа cron как таковая на современном уровне?
  • Как объединить два файла в одной строке?
  • Сценарий добавления Unix
  • команда status не распознает параметр `-p` в Ubuntu
  • Как правильно использовать $ _ внутри скрипта tcsh, полученного из другого tcsh-скрипта?
  • Замена шаблона после n-го совпадения найдена в каждой строке?
  • Добавлять файл, выводить на экран и перенаправлять из stderr все сразу, без тройника
  • удалить новые строки
  • Linux и Unix - лучшая ОС в мире.