¿Cómo escapar "!" y "&" en las variables de entorno de Docker

16

Tengo un contenedor acoplable que quiero ejecutar y entregarlo a algunas contraseñas. Uno con un signo de exclamación !y el otro con un signo de unión &. Entonces quiero ejecutar esto:

docker run -i -t --rm \
-e "LDAP_FILTER=(&(objectCategory=person)(objectClass=user)" \
-e "LDAP_PASS=Secret!Password" \
user-prefix/container-name

Eso no funciona. &se reemplaza {LDAP_FILTER}y !se trunca. Estoy bastante seguro de que tengo que escapar de estos. Pero \!y \&no funcionó.

DASKAjA
fuente
2
¿Has probado con comillas simples? Como no tiene ninguna variable para interpolar, puede salirse con comillas simples aquí.
Rich Homolka
1
Un disparo a ciegas: si el -eparámetro se ejecuta por otra instancia de shell, es posible que tenga que escapar dos veces, así que intente \\\&y \\\!.
mpy
@mpy el truco \\\ lo hizo por mí, ¡eso es lo mejor!
Simon Schnell

Respuestas:

17

Encontré una solución:

  • Usar comillas simples en lugar de comillas dobles
  • Escapar del ampersand &a\&
  • No escapar del signo de exclamación !

entonces esto funciona:

docker run -i -t --rm \
-e 'LDAP_FILTER=(\&(objectCategory=person)(objectClass=user)' \
-e 'LDAP_PASS=Secret!Password' \
user-prefix/container-name
DASKAjA
fuente