Jak uciec „!” oraz „&” w zmiennych środowiska dokera

16

Mam kontener dokera, który chcę uruchomić, i przekazuję mu niektóre hasła. Jeden ze znakiem wykrzyknika, !a drugi ze znakiem ampersand &. Więc chcę uruchomić to:

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

To nie działa. &zostanie zastąpiony {LDAP_FILTER}i !zostanie obcięty. Jestem prawie pewien, że muszę uciec. Ale \!i \&nie wyszło.

DASKAjA
źródło
2
Próbowałeś z pojedynczymi cytatami? Ponieważ nie masz żadnych zmiennych do interpolacji, możesz uciec od pojedynczych cudzysłowów tutaj.
Rich Homolka
1
Ślepy strzał: jeśli -eparametr zostanie wykonany przez inną instancję powłoki, być może będziesz musiał dwa razy uciec, więc spróbuj \\\&i \\\!.
mpy
@ moja sztuczka zrobiła to dla mnie, to jest najlepsze!
Simon Schnell

Odpowiedzi:

17

Znalazłem rozwiązanie:

  • Używanie pojedynczych cudzysłowów zamiast podwójnych cudzysłowów
  • Escape ampersand &to\&
  • Nie ucieka wykrzyknikowi !

więc to działa:

docker run -i -t --rm \
-e 'LDAP_FILTER=(\&(objectCategory=person)(objectClass=user)' \
-e 'LDAP_PASS=Secret!Password' \
user-prefix/container-name
DASKAjA
źródło