системная команда bash - PullRequest
       14

системная команда bash

0 голосов
/ 03 ноября 2011

Я хочу использовать системную команду в сценарии оболочки bash.Точнее говоря, если какое-то условие в awk выполнено (количество рабочих узлов равно 17), я хочу отправить мне электронное письмо, я написал следующий код:

showq | grep nodes | awk '{if ($3 == 17) system("mailx -s 'Everything is Ok' armando@nodes.com <<EOF Tranquiquis EOF")  ; else  print "some nodes are not working"; fi }'

, если я напечатал, что получаю сообщение:

awk: {if ($ 3 == 17) system ("mailx -s Everything
awk: ^ неопределенная строка

Я думаю, что проблема связана с тем, как телосообщение указано. Я не знаю, как это сделать. Я пробовал несколько способов исправить ошибку, но безуспешно.

regards.

Ответы [ 4 ]

2 голосов
/ 03 ноября 2011

Как указали 2 других ответа, проблема заключается в использовании вами одинарных кавычек. К сожалению, рекомендуемое ими решение (обратная косая черта, выходящая за одинарную кавычку) не работает. Вы не можете получить одинарную кавычку, экранируя ее в одной строке в кавычках. Самое простое решение для вас - написать:

system("mailx -s \"Everything is Ok\" ...
0 голосов
/ 15 января 2017
showq | grep nodes | awk '
{
  if ($3 == 17)
    system("mailx -s \47Everything is Ok\47 armando@nodes.com <<eof" RS \
    "Tranquiquis" RS "eof")
  else print "some nodes are not working"
}
'
  1. Используйте восьмеричные экранированные символы вместо одинарных кавычек

  2. Вам нужны переводы строк внутри этого heredoc

  3. «fi» недействительно для Awk

0 голосов
/ 05 ноября 2011

Я нашел проблему, она не имела ничего общего с одинарными кавычками.На самом деле я использовал команды типа 'showq', но нужно использовать весь путь команды следующим образом: '/ opt / moab / bin / showq' в crontabs.

Спасибо.

0 голосов
/ 03 ноября 2011

вы используете одинарные кавычки для команды awk, а внутри них одинарные кавычки для текста, вы должны экранировать их обратной косой чертой.

...