我的剧本的额外参数中带有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 }}"
有什么办法解决此问题吗?
答案 0 :(得分:1)
installdir打印为
c:\test
,我希望它应该打印为c:\\test
installdir
包含:c
:
标签 e
s
t
。
\t
模块输出中, tab 被debug
替换,实际上,您在屏幕上看到c:\test
。
示例中以反斜杠开头的其他字符(\p
,\o
,\l
)没有特殊含义,因此将它们视为两个字符串。但是您会在\n
(和其他escape sequences)中看到相同的现象。
不要使用debug
模块来调试与数据有关的事物,它会处理字符串以使其可打印。
相反,将copy
与content
参数一起使用,并检查文件中的输出:
- copy:
content: |-
installdir={{ installdir }}
stragedir={{ stagedir }}
outdir={{ outdir }}
dest: ./result.txt
(请记住,您可以/应该使用hexdump
来验证里面的内容)。
使用:
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)。