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é.


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
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.