Ciąg „! 23” zostaje zastąpiony przez „docker” w wierszu poleceń

17

Mam polecenie Maven z parametrem:

mvn test -Dcommon_password=!23foo

To polecenie jest wykonywane jako

mvn test -Dcommon_password=dockerfoo

Tj. !23Jest zastępowany docker. Dlaczego tak się dzieje i jak mogę tego uniknąć?

Vitalii Plagov
źródło

Odpowiedzi:

43

To jest rozszerzenie historii : !23zostaje zastąpione 23. poleceniem w twojej historii.

Aby tego uniknąć, użyj pojedynczych cudzysłowów:

mvn test '-Dcommon_password=!23foo'
Stephen Kitt
źródło
5
lub wyłącz to całkowicie za pomocą set +H/set +o histexpand
ilkkachu 16.04.19
12
To hasło może potencjalnie zawierać wszelkiego rodzaju metaznaki powłoki. Właściwe cytowanie i ucieczka, jak w odpowiedzi M. Kitt, jest lepsze niż wyłączenie tylko jednej z możliwych możliwości. Oczywiście, nie mając hasła w procesie argumentów w pierwszej kolejności byłoby jeszcze lepiej . (-:
JdeBP
@JdeBP w moim pytaniu pokazałem hasło w zwykłym tekście tylko ze względu na prostotę. W prawdziwym projekcie argument ten bierze wartość z tajnego poświadczenia Jenkinsa. Więc jest zamaskowany i bezpieczny.
Vitalii Plagov