代码之家  ›  专栏  ›  技术社区  ›  sfgroups

Ansible无法转义windows路径第一个参数

  •  1
  • sfgroups  · 技术社区  · 6 年前

    我在额外的参数中有带有windows路径名的playbook。第一个参数没有转义驱动器号和斜杠。

    ansible-playbook d.yaml  --extra-vars "ainstalldir=c:\\test stagedir=D:\packages outdir=d:\output\log"
    
    TASK [print inpurt arguments] ********************************************************************************************************
    ok: [127.0.0.1] => {
        "msg": "installdir=c:\test, stragedir=D:\\packages, outdir=d:\\output\\log"
    }
    

    installdir打印为 c:\test ,我希望它应该打印为 c:\\test

    ---
    - name: test command line arguments
      connection: local
      hosts: 127.0.0.1
      gather_facts: false
      vars:
        installdir: "{{ ainstalldir }}"
        stagedir: "{{ stagedir }}"
        outdir: "{{ outdir }}"
    
      tasks:
      - name: print inpurt arguments
        debug:
          msg="installdir={{ installdir }}, stragedir={{ stagedir }}, outdir={{ outdir }}"
    

    你知道怎么解决这个问题吗?

    1 回复  |  直到 6 年前
        1
  •  2
  •   techraf    6 年前

    c:\test ,我希望它应该打印为 c:\\test

    installdir 包含: c : 标签 e s t .

    标签 替换为 \t debug 模块输出,实际上您看到

    示例中以反斜杠开头的其他字符( \p , \o \l )没有特殊意义,所以它们被视为两个字符串;但是你会观察到同样的现象 \n (及其他) escape sequences ).


    1. 调试 模块来调试与数据有关的东西,它处理字符串以使其可打印。

      相反,使用 copy content 参数并检查文件中的输出:

      - copy:
          content: |-
            installdir={{ installdir }}
            stragedir={{ stagedir }}
            outdir={{ outdir }}
          dest: ./result.txt
      

      hexdump 来验证里面到底是什么)。

    2. 用途:

      ansible-playbook d.yaml --extra-vars "ainstalldir=c:\\\test stagedir=D:\\\packages outdir=d:\\\output\\\log"
      

      ansible-playbook d.yaml --extra-vars 'ainstalldir=c:\\test stagedir=D:\\packages outdir=d:\\output\\log'
      

      this question