जब मैं ansible में lineinfile
का उपयोग यह लिख नहीं है '
, "
पात्रों lineinfile: 'dest=/home/xyz state=present line="CACHES="default""'
उद्धरण
यह CACHES=default
दे रहा है लेकिन वांछित आउटपुट CACHES="default"
यह कैसे प्राप्त करने के लिए है?
जब मैं ansible में lineinfile
का उपयोग यह लिख नहीं है '
, "
पात्रों lineinfile: 'dest=/home/xyz state=present line="CACHES="default""'
उद्धरण
यह CACHES=default
दे रहा है लेकिन वांछित आउटपुट CACHES="default"
यह कैसे प्राप्त करने के लिए है?
यह प्रतीत होता है कि आप उद्धरण बच सकते हैं:
- lineinfile: dest=/tmp/xyz state=present line="CACHES=\"default\""
कि इस उत्पादन देता है:
$ cat /tmp/xyz
CACHES="default"
आप एकल उद्धरण है कि दोहरे उद्धरण चिह्नों के अंदर हैं से बचने के लिए की जरूरत नहीं है:
- lineinfile: dest=/tmp/xyz state=present line="CACHES=\"default\" foo='x'"
cat /tmp/xyz
CACHES="default" foo='x'
सामग्री प्रतिस्थापित किया जा करने के लिए तो एक चर प्लेबुक में उच्च ऊपर में है, ऐसा लगता है कि आप इस
---
- hosts: tomcat
vars:
classpath: "CLASSPATH=\\\"$CATALINA_HOME/bin/foo.jar\\\""
tasks:
- lineinfile: dest="/tomcat/bin/setenv.sh" line="{{ classpath }}" state=present
तरह के बजाय भागने पात्रों उद्धरण, कुछ से बचने के लिए की जरूरत है की तरह एक लाइन के साथ समाप्त होता है परिणामी फ़ाइल
CLASSPATH="$CATALINA_HOME/bin/foo.jar"
Ansible 1.9.2 में यह एक बग (https://github.com/ansible/ansible/issues/10864) है, जो शुरुआत या पंक्ति के अंत में बच गए दोहरे उद्धरण चिह्नों को सम्मिलित करने में विफल रहता है शामिल हैं।
जैसे, निम्नलिखित
- name: /home/core/linetest lineinfile: dest="/home/core/linetest" line="\"ma\"ok\"in\""
पहली और आखिरी लापता डबल उद्धरण (भले ही आप वह भागे) का परिणाम देगा।
#/home/core/linetest ma"ok"in
इस बग के लिए क्षतिपूर्ति करने के लिए, आप शुरू करने के लिए एक उपसर्ग जोड़ सकते हैं और हो सकता है दोहरे उद्धरण चिह्नों को समाप्त हुए, और बाद में इसे हटाने।
- name: PREFIX first and last escaped double quotes with 'KUCF' lineinfile: dest="/home/core/linetest" line="KUCF\"main\"KUCF" - name: remove 'KUCF' PREFIX replace: dest="/home/core/linetest" regexp="KUCF" replace=""
जो आप
#/home/core/linetest "main"
सुनिश्चित करें कि अपनी चुनी PREFIX गंतव्य फ़ाइल के संदर्भ में कभी नहीं इस्तेमाल किया जाएगा बनाने देना चाहिए। आम तौर पर, PREFIX जितना लंबा और अधिक यादृच्छिक होगा, उतनी कम संभावना है कि यह आपकी गंतव्य फ़ाइल में मौजूदा सामग्री के साथ संघर्ष करेगी।
वैकल्पिक रूप से, आप अपने उत्तर को नवीनतम शाखा में अपग्रेड कर सकते हैं।
बस इसका पालन करें, ऊपर दिए गए उदाहरण Win_lineinfile का उपयोग कर विंडोज बॉक्स पर बैच फ़ाइल बनाने का प्रयास करते समय मेरे लिए काम नहीं करते थे। फ़ाइल बनाई जा रही थी, लाइन डाली जा रही थी, लेकिन उद्धरण और बैकस्लाश को स्वरूपित किया गया था। यह उत्तर 2.4 के साथ था। आखिर में एक सह श्रमिक सुझाव के अनुसार मैं क्या कर रहा था कुछ इनलाइन जिन्जा templating था;
- name: insert our batch file contents
win_copy:
dest: C:\QAAutomation\files\posauto.bat
force: yes
content: |
{% raw %}"C:\Program Files (x86)\NUnit 2.6.3\bin\nunit-console.exe" "C:\QAAutomation\files\1POS Automation\Application Files\Bin\Automation.dll" > "c:\QAAutomation\results\nunit-console-output.txt" {% endraw %}
प्रत्यक्ष भागने काम नहीं कर रहा है। सिंटेक्स त्रुटि उठाई गई है। – eldos
@eldos, कृपया अपना प्रश्न संपादित करें और वाक्यविन्यास त्रुटि दें। मैंने उत्तरदायी के आधुनिक संस्करण पर सफलतापूर्वक उन पंक्तियों को निष्पादित किया। – tedder42