String `! 23` wird in der Kommandozeile durch` docker` ersetzt


17

Ich habe einen Maven-Befehl mit dem Parameter:

mvn test -Dcommon_password=!23foo

Dieser Befehl wird ausgeführt als

mvn test -Dcommon_password=dockerfoo

Dh !23wird ersetzt durch docker. Warum passiert das und wie kann ich es vermeiden?

Antworten:


43

Dies ist die Verlaufserweiterung : !23wird durch den 23. Befehl in Ihrem Verlauf ersetzt.

Um dies zu vermeiden, verwenden Sie einfache Anführungszeichen:

mvn test '-Dcommon_password=!23foo'

5
oder deaktivieren Sie es vollständig mit set +H/set +o histexpand
ilkkachu

12
Dies ist ein Kennwort, das möglicherweise alle Arten von Shell-Metazeichen enthalten kann. Richtiges Zitieren und Entkommen wie in M. Kitts Antwort ist besser, als nur eine der Möglichkeiten zu deaktivieren , die auftreten könnten. Natürlich wäre es noch besser , wenn Sie in den Prozessargumenten überhaupt kein Kennwort hätten . (-:
JdeBP

@JdeBP In meiner Frage habe ich aus Gründen der Einfachheit ein Passwort im Klartext angezeigt. In einem echten Projekt erhält dieses Argument den Wert eines geheimen Berechtigungsnachweises von Jenkins. Es ist maskiert und sicher.
Vitalii Plagov
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.