String `! 23` diganti dengan` docker` di baris perintah

17

Saya punya perintah Maven dengan parameter:

mvn test -Dcommon_password=!23foo

Perintah ini dieksekusi sebagai

mvn test -Dcommon_password=dockerfoo

Yaitu !23sedang diganti dengan docker. Mengapa ini terjadi dan bagaimana saya bisa menghindarinya?

Vitalii Plagov
sumber

Jawaban:

43

Ini adalah ekspansi riwayat : !23diganti dengan perintah ke-23 dalam riwayat Anda.

Untuk menghindari ini, gunakan satu kutipan:

mvn test '-Dcommon_password=!23foo'
Stephen Kitt
sumber
5
atau nonaktifkan sepenuhnya dengan set +H/set +o histexpand
ilkkachu
12
Ini adalah kata sandi yang berpotensi berisi semua jenis karakter meta shell. Mengutip dan melarikan diri dengan benar seperti dalam jawaban M. Kitt lebih baik daripada menonaktifkan hanya satu dari kemungkinan yang bisa terjadi. Tentu saja, tidak memiliki kata sandi dalam proses argumen di tempat pertama akan lebih baik . (-:
JdeBP
@ JdeBP dalam pertanyaan saya, saya menunjukkan kata sandi dalam teks biasa hanya untuk alasan kesederhanaan. Dalam proyek nyata argumen itu mengambil nilai dari kredensial rahasia Jenkins. Jadi itu bertopeng dan aman.
Vitalii Plagov