La stringa `! 23` è sostituita da` docker` nella riga di comando


17

Ho un comando Maven con il parametro:

mvn test -Dcommon_password=!23foo

Questo comando viene eseguito come

mvn test -Dcommon_password=dockerfoo

Vale a dire che !23viene sostituito docker. Perché succede e come posso evitarlo?

Risposte:


43

Questa è l' espansione della cronologia : !23viene sostituita con il 23 ° comando nella cronologia.

Per evitare ciò, utilizzare virgolette singole:

mvn test '-Dcommon_password=!23foo'

5
o disabilitalo completamente con set +H/set +o histexpand
ilkkachu il

12
Questa è una password che può potenzialmente contenere tutti i tipi di metacaratteri della shell. Citare e scappare correttamente come nella risposta di M. Kitt è meglio che disabilitare solo una delle possibilità che potrebbero verificarsi. Naturalmente, non avere una password per elaborare gli argomenti in primo luogo sarebbe ancora meglio . (-:
JdeBP,

@JdeBP nella mia domanda ho mostrato una password in un testo semplice solo per motivi di semplicità. In un progetto reale tale argomento prende il valore da una credenziale segreta di Jenkins. Quindi è mascherato e sicuro.
Vitalii Plagov,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.