Comment échapper "!" et «&» dans les variables d'environnement du docker

16

J'ai un conteneur Docker que je veux exécuter et lui remettre des mots de passe. L'un avec un point d'exclamation !et l'autre avec une esperluette &. Je veux donc exécuter ceci:

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

Cela ne fonctionne pas. &est remplacé par {LDAP_FILTER}et le !tronqué. Je suis sûr que je dois y échapper. Mais \!et \&n'a pas fonctionné.

DASKAjA
la source
2
Avez-vous essayé avec des guillemets simples? Comme vous n'avez aucune variable à interpoler, vous pouvez vous en tirer avec des guillemets simples ici.
Rich Homolka
1
Un tir aveugle: si le -eparamètre est exécuté par une autre instance de shell, vous devrez peut-être vous échapper deux fois, alors essayez \\\&et \\\!.
mpy
@mpy l'astuce \\\ l'a fait pour moi, c'est le meilleur!
Simon Schnell

Réponses:

17

J'ai trouvé une solution:

  • Utilisation de guillemets simples au lieu de guillemets doubles
  • Échapper à l'esperluette &pour\&
  • Ne pas échapper au point d'exclamation !

donc ça marche:

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