La chaîne `! 23` est remplacée par` docker` dans la ligne de commande

17

J'ai une commande Maven avec le paramètre:

mvn test -Dcommon_password=!23foo

Cette commande est exécutée comme

mvn test -Dcommon_password=dockerfoo

C'est à dire !23est remplacé par docker. Pourquoi cela se produit-il et comment puis-je l'éviter?

Vitalii Plagov
la source

Réponses:

43

Il s'agit d'une extension de l'historique : !23est remplacée par la 23e commande de votre historique.

Pour éviter cela, utilisez des guillemets simples:

mvn test '-Dcommon_password=!23foo'
Stephen Kitt
la source
5
ou désactivez-le complètement avec set +H/set +o histexpand
ilkkachu
12
Il s'agit d'un mot de passe qui peut potentiellement contenir toutes sortes de métacaractères shell. Citer et s'échapper correctement comme dans la réponse de M. Kitt vaut mieux que de désactiver une seule des possibilités qui pourraient se présenter. Bien sûr, ne pas avoir de mot de passe dans les arguments de processus en premier serait mieux . (-:
JdeBP
@JdeBP dans ma question, j'ai montré un mot de passe en texte brut juste pour des raisons de simplicité. Dans un projet réel, cet argument prend la valeur d'une information d'identification secrète Jenkins. C'est donc masqué et sûr.
Vitalii Plagov