La cadena `! 23` se reemplaza con` docker` en la línea de comando

17

Tengo un comando Maven con el parámetro:

mvn test -Dcommon_password=!23foo

Este comando se está ejecutando como

mvn test -Dcommon_password=dockerfoo

Es decir, !23está siendo sustituido con docker. ¿Por qué sucede esto y cómo puedo evitarlo?

Vitalii Plagov
fuente

Respuestas:

43

Esta es la expansión del historial : !23se reemplaza con el comando 23 en su historial.

Para evitar esto, use comillas simples:

mvn test '-Dcommon_password=!23foo'
Stephen Kitt
fuente
55
o deshabilítelo completamente con set +H/set +o histexpand
ilkkachu
12
Esta es una contraseña que puede contener todo tipo de metacaracteres de shell. Citar y escapar correctamente como en la respuesta de M. Kitt es mejor que deshabilitar solo una de las posibilidades que podrían ocurrir. Por supuesto, no tener una contraseña en los argumentos de proceso en primer lugar sería mejor aún . (-:
JdeBP
@JdeBP en mi pregunta, mostré una contraseña en un texto plano solo por razones de simplicidad. En un proyecto real, ese argumento toma el valor de una credencial secreta de Jenkins. Entonces está enmascarado y seguro.
Vitalii Plagov