So entkommen Sie "!" und "&" in Docker-Umgebungsvariablen

So entkommen Sie "!" und "&" in Docker-Umgebungsvariablen

Ich habe einen Docker-Container, den ich ausführen und ihm einige Passwörter übergeben möchte. Eines mit einem Ausrufezeichen !und das andere mit einem Et-Zeichen &. Ich möchte also Folgendes ausführen:

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

Das funktioniert nicht. &wird ersetzt durch {LDAP_FILTER}und !wird abgeschnitten. Ich bin ziemlich sicher, dass ich diese maskieren muss. Aber \!und \&hat nicht geklappt.

Antwort1

Ich habe eine Lösung gefunden:

  • Verwenden von einfachen Anführungszeichen anstelle von doppelten Anführungszeichen
  • Entkomme dem Et-Zeichen, &um\&
  • Dem Ausrufezeichen nicht entkommen!

also das funktioniert:

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

Antwort2

Wenn Sie aus irgendeinem Grund (z. B. wegen der Variablenerweiterung) nicht für die gesamte Zeichenfolge einfache Anführungszeichen verwenden können, ist dies wahrscheinlich die beste Lösung:Wie entkomme ich in Bash einem Ausrufezeichen?

Zusammenfassend: "'!'"Um das Ausrufezeichen herum verwenden Sie:

echo "hello there"'!'" and goodbye"

verwandte Informationen