Ansible不转义Windows路径的第一个参数

时间:2018-09-08 20:30:19

标签: ansible

我的剧本的额外参数中带有Windows路径名。第一个参数不能转义驱动器号和斜杠。

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 个答案:

答案 0 :(得分:1)

  

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

installdir包含:c : 标签 e s t

\t模块输出中,

tab debug替换,实际上,您在屏幕上看到c:\test

示例中以反斜杠开头的其他字符(\p\o\l)没有特殊含义,因此将它们视为两个字符串。但是您会在\n(和其他escape sequences)中看到相同的现象。


  1. 不要使用debug模块来调试与数据有关的事物,它会处理字符串以使其可打印。

    相反,将copycontent参数一起使用,并检查文件中的输出:

    - 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'
    

    双引号和单引号中的反斜杠由shell解释不同(例如,参见this question)。