ใน playbook ของฉัน บรรทัดต่อไปนี้ควรกลับมา 1และถ้ามันกลับมา >1การเล่นควรหยุด:
เปลือก: ls -l /opt/tomcat/|grep "[ ]\+{{ newTomcatVer }}$"; ก้อง $?
การเล่นของฉันล้มเหลวด้วยข้อผิดพลาดนี้:
"msg": "มี /opt/tomcat/apache-tomcat-8.x.xx มากกว่าหนึ่งอินสแตนซ์บน server01 สิ้นสุดการเล่น"
หลังจากรันอีกครั้งในโหมดดีบั๊ก ฉันเห็นว่าคำสั่งเชลล์นี้ถูกแสดงในลักษณะนี้ในเอาต์พุตดีบั๊ก:
"cmd": "ls -l /opt/tomcat/|grep \"[ ]\+apache-tomcat-8.5.69$\"; echo $?",
ในข้างต้น เครื่องหมายอัญประกาศคู่จะถูกหลีกด้วย \ อักขระ. คำถามคือ คำสั่งใดที่ใช้จริง - คำสั่งที่อยู่ใน playbook หรือคำสั่งที่เราเห็นในเอาต์พุตดีบั๊ก
เพราะถ้าฉันเรียกใช้คำสั่งที่อยู่ในโน้ตบุ๊ก เช่น โดยไม่มีอักขระหลีก ผลลัพธ์ที่ได้คือ 1 อย่างที่คาดไว้:
[tomcat@server01 ~]$ ls -l /opt/tomcat/|grep "[ ]\+apache-tomcat-8.5.69$"; ก้อง $?
1
แต่ถ้าฉันออกคำสั่งที่อยู่ในเอาต์พุตการดีบัก ฉันจะได้รับสิ่งนี้:
[tomcat@server01 ~]$ ls -l /opt/tomcat/|grep \"[ ]\+apache-tomcat-8.5.69$\"; ก้อง $?
grep: นิพจน์ทั่วไปไม่ถูกต้อง
2
ความคิดใดที่จะแก้ปัญหานี้?