我想在bash shell脚本中使用system命令。更具体, 如果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:^ unterminated string
我认为这个问题与如何指定消息正文有关。我不 知道怎么做。我已经尝试了几种方法来修复错误但没有成功。
问候。
答案 0 :(得分:2)
正如其他2个答案所述,问题是您使用单引号。不幸的是,他们给出的推荐解决方案(反斜杠逃避单引号)不起作用。您不能通过在单个带引号的字符串中转义它来获得单引号。最简单的解决方案是写:
system("mailx -s \"Everything is Ok\" ...
答案 1 :(得分:0)
你正在使用awk命令的单引号,在其中,你应该用反斜杠转义它们的单引号。
答案 2 :(得分:0)
我发现了问题,它与单引号无关。实际上,我使用的命令如'showq',但必须使用整体 这种命令的路径:crontabs中的'/ opt / moab / bin / showq'。
感谢。
答案 3 :(得分:0)
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"
}
'
使用八进制转义符而不是单引号
你需要heredoc内的换行符
&#34;连接&#34;对于Awk无效