เครื่องหมายคำพูดคำสั่งเชลล์ ad-hoc แบบ Ansible ภายในเครื่องหมายคำพูด - จะหลบหนีได้อย่างไร

ฉันมีคำสั่ง adhoc ที่ค่อนข้างง่ายโดยใช้เชลล์เพื่อรัน chfn:

ansible all -i ./inventory/all  -s -K -m shell -a 'chfn -f "$HOSTNAME root" root'

chfn ต้องการเครื่องหมายคำพูดคู่ และฉันได้ลองวิธีต่างๆ หลายวิธีเพื่อหลบหนีโดยไม่มีโชค ฉันได้ลองห่อคำสั่งเชลล์ด้วยเครื่องหมายคำพูดคู่และเครื่องหมายคำพูดเดี่ยว และใช้ / เพื่อหลีกเครื่องหมายคำพูดคู่และลองใช้เครื่องหมายคำพูดเดี่ยวเช่นกัน การเรียกใช้ chfn -f "$HOSTNAME root" root ใช้งานได้ดี แต่ฉันไม่สามารถทราบวิธีที่จะเรียกใช้ด้วยวิธีนี้ได้ (ฉันรู้ว่ามันเป็นตัวเลือก แต่ฉันไม่อยากเปลี่ยนเป็นเชลล์สคริปต์และเรียกใช้ด้วยวิธีนั้นผ่าน ansible ถ้าเป็นไปได้)


person Blake    schedule 15.05.2017    source แหล่งที่มา


คำตอบ (2)


เมื่อคุณมีเครื่องหมายคำพูดซ้อนกัน ดังตัวอย่างด้านล่าง คุณสามารถ หลีกเลี่ยงเครื่องหมายคำพูดเดี่ยว ได้โดยการหลีกเลี่ยง ด้วยเครื่องหมายคำพูดเดี่ยวอีกอันหนึ่ง

ทำให้เครื่องหมายคำพูดโดยรอบเป็นเครื่องหมายคำพูดเดี่ยว ' จากนั้นคุณไม่จำเป็นต้องหลีกเลี่ยงเครื่องหมายคำพูดคู่ " และคุณสามารถหลีกเลี่ยงเครื่องหมายคำพูดเดี่ยวภายในคำสั่งของคุณด้วยเครื่องหมายคำพูดเดี่ยวอื่นเช่น ''

 - name: Notify on slack
    command: 'curl -X POST -H ''Content-type: application/json'' --data ''{"text":"{{inventory_hostname}} has been updated"}'' https://hooks.slack.com/services/XXXX/YYY/ZZZ'
    when: inventory_hostname == 'host1.de' or inventory_hostname == 'host.de'
    delegate_to: localhost
person Ralf Kramer    schedule 23.10.2018

ansible นั้นยุ่งยากเกี่ยวกับสิ่งนี้ในคำสั่งเฉพาะกิจ หากคุณต้องการผ่านมันเหมือนเดิม คุณจะต้องหลีกเลี่ยงเครื่องหมายคำพูด ตัวอย่างบางส่วนด้านล่าง:

ansible localhost -a 'echo \"$HOSTNAME\"'
localhost | SUCCESS | rc=0 >>
"$HOSTNAME"

ansible localhost -a "echo $HOSTNAME"
localhost | SUCCESS | rc=0 >> 
my_hostname
person Steve Miskiewicz    schedule 09.01.2018