String `! 23` ถูกแทนที่ด้วย` docker 'ในบรรทัดคำสั่ง


17

ฉันมีคำสั่ง Maven พร้อมพารามิเตอร์:

mvn test -Dcommon_password=!23foo

คำสั่งนี้จะถูกดำเนินการเป็น

mvn test -Dcommon_password=dockerfoo

คือจะถูกแทนที่ด้วย!23 dockerเหตุใดสิ่งนี้จึงเกิดขึ้นและฉันจะหลีกเลี่ยงได้อย่างไร

คำตอบ:


43

นี่คือการขยายประวัติ : !23ถูกแทนที่ด้วยคำสั่ง 23 ในประวัติของคุณ

เพื่อหลีกเลี่ยงปัญหานี้ให้ใช้เครื่องหมายคำพูดเดี่ยว:

mvn test '-Dcommon_password=!23foo'

5
หรือปิดการใช้งานอย่างสมบูรณ์ด้วยset +H/set +o histexpand
ilkkachu

12
นี่คือรหัสผ่านที่อาจมีเชลล์เมตาอักขระทุกประเภท ต้องเสนอราคาและการหลบหนีในขณะที่คำตอบเอ็มกิตจะดีกว่าการปิดใช้งานเพียงหนึ่งของความเป็นไปได้ที่อาจเกิดขึ้น แน่นอนไม่ได้มีรหัสผ่านในการขัดแย้งกระบวนการในสถานที่แรกจะดีกว่ายังคง (-:
JdeBP

@JdeBP ในคำถามของฉันฉันแสดงรหัสผ่านเป็นข้อความธรรมดาเพื่อความเรียบง่าย ในโครงการจริงที่อาร์กิวเมนต์ใช้ค่าจากหนังสือรับรองลับของเจนกินส์ ดังนั้นจึงสวมหน้ากากและปลอดภัย
Vitalii Plagov
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.