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?

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'

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
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.