如何在Ansible运行输出中显示文件内容时去除双引号
问题:Ansible输出文件内容时每行带双引号如何去除
用户有一个不含双引号的clean.txt文件,内容如下:
[wladmin@linuxhost ~]$ cat clean.txt REPL session history will not be persisted. WDA-EMEA-PROD { db: 'WDA-EMEA-PROD', collections: 53, ok: 1, '$clusterTime': { clusterTime: Timestamp({ t: 1719475282, i: 1 }), signature: { hash: Binary.createFromBase64('jXjZEjVC7wm8wCNuJVTSvGWZNO4=', 0), keyId: Long('7348787707444723714') } }, operationTime: Timestamp({ t: 1719475282, i: 1 }) } Get Collection Count
编写了如下Ansible Playbook尝试原样显示文件内容:
[wladmin@linuxhost ~]$ cat logformat.yml --- - name: "Play 1" hosts: localhost gather_facts: no tasks: - name: Read Github logs raw: "cat clean.txt" register: file_contentone - debug: msg: "{{ file_contentone.stdout_lines }}"
但运行后输出中每行内容被自动添加了双引号,希望实现输出时每行不带双引号的效果。
解决方案
方法1:使用stdout代替stdout_lines
stdout_lines会把文件内容按行拆分成列表,debug模块输出列表时会给每个元素添加双引号。而stdout是完整的文本内容(包含换行符),直接输出即可还原原文件格式:
修改Playbook中的debug任务:
- debug: msg: "{{ file_contentone.stdout }}"
方法2:将stdout_lines合并为字符串
通过join过滤器把列表中的每行内容用换行符拼接成完整文本,也能避免列表格式带来的双引号:
- debug: msg: "{{ file_contentone.stdout_lines | join('\n') }}"
方法3:直接输出到终端(可选)
如果不需要通过debug模块输出,也可以用shell模块直接打印内容,完全还原原格式:
- name: Print file content directly shell: cat clean.txt
内容的提问来源于stack exchange,提问作者Ashar
相关产品推荐
相关产品推荐

