简体   繁体   English

Ansible shell 无法运行 shell 脚本任务

[英]Ansible shell failing to run shell script task

I have this shell script within a role in ansible and it will not run:我在 ansible 的角色中有这个 shell 脚本,它不会运行:

  - name: validate AWS cloudwatch download
    shell: |
      cw_expected_key="9376 16F3 450B 7D80 6CBD  9725 D581 6730 3B78 9C72"
      cw_public_key=`gpg --import /tmp/cloud-watch-validation/amazon-cloudwatch-agent.gpg |& grep -Po "key\s*[A-Z0-9]+" | egrep -o "[A-Z0-9]+"`
      key=`gpg --fingerprint $cw_public_key |& grep -Po $cw_expected_key`
      if [ "$key" != "$cw_expected_key" ]; then
        exit 1
      fi
      validation=`gpg --verify /tmp/cloud-watch-validation/amazon-cloudwatch-agent.deb.sig  /tmp/cloud-watch/amazon-cloudwatch-agent.deb |& grep -Po "Good signature"`
      if [ "$validation" != "Good signature" ]; then
        exit 1
      fi

I get this error:我收到此错误:

fatal: [127.0.0.1]: FAILED!致命:[127.0.0.1]:失败! => {"changed": true, "cmd": "cw_expected_key="9376 16F3 450B 7D80 6CBD 9725 D581 6730 3B78 9C72"\\ncw_public_key= gpg --import /tmp/c loud-watch-validation/amazon-cloudwatch-agent.gpg |& grep -Po \\"key\\\\s*[A-Z0-9]+\\" | egrep -o \\"[A-Z0-9]+\\" \\nkey= gpg --fingerprint $cw_public_key |& grep -Po $cw_expected_key \\nif [ "$key" != "$cw_expected_key" ]; then\\n exit 1\\nfi\\nvalidation= gpg --verify /tmp/cloud-watch-validation/amazon-cloudwatch-agent.deb.sig /tmp/cloud-watch/amazon-cloudwatch-agent.deb |& grep -Po \\"Good signature\\" \\nif [ "$validation" != "Good signature" ]; then\\n exit 1 \\nfi\\n", "delta": "0:00:00.003070", "end": "2021-11-02 18:57:44.246780", "msg": "non-zero return code", "rc": 2, "start": "2021-11-02 18:57:44.243710", "stderr": "/bin/sh: 1: Syntax error: "&" unexpected", "stderr_lines": ["/bin/sh: 1: Syntax error: "&" unexpected"], "stdout": "", "stdout_lines": []} => {"changed": true, "cmd": "cw_expected_key="9376 16F3 450B 7D80 6CBD 9725 D581 6730 3B78 9C72"\\ncw_public_key= gpg --import /tmp/c loud-watch-validation/amazon-cloudwatch-agent.gpg |& grep -Po \\"key\\\\s*[A-Z0-9]+\\" | egrep -o \\"[A-Z0-9]+\\" cloud gpg --import /tmp/c loud-watch-validation/amazon-cloudwatch-agent.gpg |& grep -Po \\"key\\\\s*[A-Z0-9]+\\" | egrep -o \\"[A-Z0-9]+\\" \\nkey= gpg --fingerprint $cw_public_key |& grep -Po $cw_expected_key \\nif [ "$key" != "$cw_expected_key" ]; then\\n exit 1\\nfi\\nvalidation= gpg --verify /tmp/cloud-watch-validation/amazon-cloudwatch-agent.deb.sig /tmp/cloud-watch/amazon-cloudwatch-agent.deb |& grep -Po \\"Good signature\\" \\nif [ "$validation" != "Good signature" ]; then\\n exit 1 \\nfi \\n", "delta": "0:00:00.003070", "end": "2021-11-02 18:57:44.246780", "msg": "非零返回码", "rc": 2 , "start": "2021-11-02 18:57:44.243710", "stderr": "/bin/sh: 1: 语法错误: "&"意外", "stderr_lines": ["/bin/sh: 1:语法错误:“&”意外”],“stdout”:“”,“stdout_lines”:[]}

Anyone have any ideas?谁有想法?

|& is a Bash extension, rather deprecated. |&是一个 Bash 扩展,相当不推荐使用。 It's not support in sh mode.sh模式下不支持。 And anyway do not use |& , forget it exists.无论如何不要使用|& ,忘记它存在。 Use 2>&1 |使用2>&1 | . . See https://wiki.bash-hackers.org/scripting/obsolete请参阅https://wiki.bash-hackers.org/scripting/obsolete

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM