ansible lineinfile 转义引号丢失

ansible lineinfile 转义引号丢失

使用 ansible 1.5.4,命令

lineinfile: dest=/etc/bash.bashrc line="bind '\"\e[B\"':history-search-forward"

添加行

bind '"\e[B"':history-search-forward

完美/etc/bash.bashrc

在 ansible 1.9.1 上,相同的 ansible 指令会生成以下行,这会弄乱我在 lineinfile 命令中转义的引号:

bind \e[B:history-search-forward

我该如何修复引号,以便添加正确的行

答案1

通常,可以使用多行输入形式来避免一些混乱,尤其是在输入冒号时:

command: > curl -X POST -H 'Content-Type: application/json' --data '{"name": "{{ item.name }}", "comment": "{{ item.comment }}", "DefaultDistribution": "{{ item.default_distribution }}", "DefaultComponent": "{{ item.default_component }}" }' http://localhost:8080/api/repos

答案2

我编写了一个小型的 Ansible 剧本,我认为它可以完成你想要的功能(尽管是针对测试文件而不是实际的 bashrc)。

---

- name: Example for serverfault.com
  hosts: all
  tasks:
  - name: Put line with quotes, backslash, and colon in a file
    lineinfile: 
      dest: /home/vagrant/testfile.txt
      create: yes
      line: "bind '\"\\e[B\"':history-search-forward"

我已经运行了这个并且在 testfile.txt 中得到了这一行:

bind '"\e[B"':history-search-forward

我正在使用 Ansible 2.1.1.0。我不知道它与 1.9.1 有何不同

相关内容