【问题标题】:system command bash系统命令bash
【发布时间】:2011-12-21 11:48:30
【问题描述】:

我想在 bash shell 脚本中使用系统命令。再具体一点, 如果满足 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: ^ 未终止的字符串

我认为的问题与如何指定消息正文有关。我不 知道该怎么做。我尝试了几种方法来修复错误,但没有成功。

问候。

【问题讨论】:

    标签: bash awk grep system


    【解决方案1】:

    您在 awk 命令中使用单引号,在其中,单引号代表文本,您应该使用反斜杠对其进行转义。

    【讨论】:

      【解决方案2】:

      正如其他 2 个答案所述,问题在于您使用单引号。不幸的是,他们给出的推荐解决方案(反斜杠转义单引号)不起作用。您不能通过在单引号字符串中对其进行转义来获得单引号。最简单的解决方案是编写:

      system("mailx -s \"一切正常\" ...

      【讨论】:

      • 我按照你的建议输入:system("mailx -s \"Everything is Ok\" armando@nodes.com 附近的语法错误
      • 尝试让 HEREDOC (
      【解决方案3】:

      我发现了问题,它与单引号无关。实际上,我使用的是像“showq”这样的命令,但必须使用整个 这种方式的命令路径:'/opt/moab/bin/showq' in crontabs。

      谢谢。

      【讨论】:

        【解决方案4】:
        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 无效

        【讨论】:

          猜你喜欢
          • 2011-04-25
          • 2015-02-19
          • 2011-11-19
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2013-02-22
          相关资源
          最近更新 更多