Mit Ansible 1.5.4 lautet der Befehl
lineinfile: dest=/etc/bash.bashrc line="bind '\"\e[B\"':history-search-forward"
fügte die Zeile hinzu
bind '"\e[B"':history-search-forward
bis /etc/bash.bashrc
vollkommen in Ordnung.
Unter Ansible 1.9.1 erzeugt dieselbe Ansible-Anweisung die folgende Zeile, die die Anführungszeichen durcheinanderbringt, die ich im Lineinfile-Befehl maskiert habe:
bind \e[B:history-search-forward
Wie kann ich die Anführungszeichen korrigieren, damit die richtige Zeile hinzugefügt wird?
Antwort1
Normalerweise können Sie einige Probleme mit der Escape-Sequenz vermeiden, indem Sie die Eingabe mehrzeilig gestalten, insbesondere bei der Eingabe von Doppelpunkten:
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
Antwort2
Ich habe ein kleines Ansible-Playbook geschrieben, das meiner Meinung nach das macht, was Sie wollen (allerdings in einer Testdatei statt in der eigentlichen 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"
Ich habe dies ausgeführt und erhalte diese Zeile in testfile.txt:
bind '"\e[B"':history-search-forward
Ich verwende Ansible 2.1.1.0. Ich weiß nicht, ob sich das von 1.9.1 unterscheidet