Пытаться направить содержимое переменной в команду дает 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` 
  • Эффективный таргетинг конкретного туннеля SSH из всех текущих?
  • соответствие шаблону grep
  • Команда не найдена при запуске функции в bash
  • Как я проверяю, существует ли конкретное число. Слово в строке?
  • shell-скрипты и запуск после переключения на другого пользователя
  • Как получить двоичные представления строк в Shell?
  • Получите очень следующее слово подстроки в строке
  • Зеркало LFTP включает в себя - включая другие каталоги, отличные от того, что я включил
  • cp не правильно оценивает имя dirname в операции поиска
  • Вывод команды Pipe на Yad, а также запись результата в файл журнала
  • Какой из них работает быстрее - обычные операторы (такие как <,>, =) или используя (-lt, -gt, -eq)? и почему?
  • Interesting Posts
    Linux и Unix - лучшая ОС в мире.