Ansible LineInFile - Escape-Anführungszeichen gehen verloren

Ansible LineInFile - Escape-Anführungszeichen gehen verloren

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.bashrcvollkommen 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

verwandte Informationen