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?

Vitalii Plagov
quelle

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'
Stephen Kitt
quelle
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