2010-07-27 3 views
31

Ich habe ein einfaches Python-Skript, das Benutzernamen und Passwort als Argument erhält. Aber mein Passwort enthält zwei Ausrufe marks.When i Skript aufrufen:Wie man Argument mit Ausrufezeichen auf Linux übergibt?

[email protected]:~/Desktop/$ emailsender.py -u username -p pass!!

Befehl, den ich früher eingeben ersetzen Ausrufezeichen

[email protected]:~/Desktop/$emailsender.py -u username -p "passemailsender.py -u username -p passwget wget http://www.crobot.com.hr/templog"

kann ich Ausrufezeichen mit Backslash (\), aber mein Passwort ändert entkommen. Gibt es dafür eine Lösung, wie kann ich Ausrufezeichen umgehen, ohne das Passwort zu ändern?

+0

Der zweite Befehl nicht viel Sinn machen, was versuchen Sie es zu tun ?? Speziell der 'passamailsender.py -u Benutzername -p passwget wget ...' Teil – adamJLev

+2

!! Wird diese durch die Shell ersetzt, wird sie durch den zuletzt ausgeführten Befehl ersetzt. Dies ist nicht spezifisch für Python. –

+2

@Infinity - Bash interpretiert "!!" als der letzte eingegebene Befehl. Wenn er also den Befehl eingibt, ohne sein Passwort mit einfachen Anführungszeichen oder umgekehrten Schrägstrichen zu verlassen, fügt bash seinen letzten Befehl ein, wobei "!!" war. –

Antwort

48

Sie sollten in der Lage sein, einfach Dinge in einfache Anführungszeichen in der Shell einzubinden.

$ emailsender.py -u username -p 'pass!!' 
-2

Haben Sie

versucht
$ emailsender.py -u username -p "pass!!" 

Bearbeiten- Das wird nicht funktionieren. Lesen Sie die Kommentare unter

+0

doppelte Anführungszeichen wird nicht helfen – unbeli

+2

Double/einfache Anführungszeichen, würde in diesem Beispiel beide gleich funktionieren. Der Unterschied besteht darin, dass einfache Anführungszeichen $ VARIABLES und doppelte Anführungszeichen nicht erweitern. http://www.mpi-inf.mpg.de/~uwe/lehre/unixffb/quotting-guide.html – adamJLev

+2

"!!" ist jedoch eine Variable in bash, also sind einfache Anführungszeichen erforderlich. –

16

Sie müssen es entkommen mit \ oder es mit einfachen Anführungszeichen zitieren, sonst Shell interpretiert.

emailsender.py -u username -p pass\!\! 

oder

emailsender.py -u username -p 'pass!!' 
+2

nur für den Rekord, Flucht funktioniert in Ordnung, wenn Sie das Argument nicht doppelt zitieren. Andernfalls wird das '\' wortwörtlich in die Datei geschrieben. – Bengalaa

2

Wie bereits von anderen erwähnt, ist diese Frage zu Python nicht spezifisch, sondern wird verursacht durch, wie Sie die Kennwort-Parameter an das Skript vorbei sind.

Sie sollten die Kennwortzeichenfolge in einfache Anführungszeichen setzen, um sicherzustellen, dass sie genau an das Skript übergeben wird, wenn Sie sie eingeben, und nicht von der Shell interpretiert wird.

Sie könnten dies auch für den Benutzernamen tun, wenn es die Möglichkeit gibt, dass es ein Ausrufezeichen oder ein anderes Sonderzeichen enthält.

Zum Beispiel:

emailsender.py -u 'username' -p 'pass!!' 
Verwandte Themen