Используя 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.