2010-07-27 20 views
31

Tengo un script de python simple que recibe nombre de usuario y contraseña como argumento. Pero mi contraseña contiene dos exclamación marks.When yo llamo la escritura:¿Cómo pasar el argumento con un signo de exclamación en Linux?

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

comando que entro a principios de reemplazar signos de admiración

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

puedo escapar de exclamación con la barra invertida (\) pero mis cambios de contraseña. ¿Hay solución para esto? ¿Cómo puedo evitar los signos de admiración sin cambiar la contraseña?

+0

El segundo comando no tiene mucho sentido, lo que estás tratando de hacer allí ?? Especialmente el 'passemailsender.py -u username -p passwget wget ...' parte – adamJLev

+2

!! es sustituido por el shell, es reemplazado por el último comando ejecutado. Esto no es específico para Python. –

+2

@Infinity - Bash interpreta "!!" como el último comando que ingresaste. Por lo tanto, cuando ingresa el comando sin escapar de su contraseña usando comillas simples o barras diagonales inversas, bash inserta su último comando donde el "!!" estaba. –

Respuesta

48

Debería poder simplemente ajustar las cosas entre comillas simples en el intérprete de comandos.

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

Ha intentado

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

EDIT- Esto no funcionará. Lea los comentarios a continuación

+0

comillas dobles no ayudarán – unbeli

+2

Comillas dobles/simples, ambas funcionarían igual en este ejemplo. La diferencia es que las comillas simples no expanden $ VARIABLES, y las comillas dobles sí. http://www.mpi-inf.mpg.de/~uwe/lehre/unixffb/quoting-guide.html – adamJLev

+2

"!!" es una variable en bash, por lo que se requieren comillas simples. –

16

tiene que escapar con \ o citarlo con comillas simples, de lo contrario su shell interpreta.

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

o

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

solo para que conste, escaparse funciona bien si no estás citando el argumento. De lo contrario, el '\' se escribirá literalmente en el archivo. – Bengalaa

2

como han mencionado otros, este problema no es específico de Python, pero es causado por la forma en que está pasando el parámetro clave para el guión.

Querrá ajustar la cadena de contraseña entre comillas simples para asegurarse de que se transmite al guión exactamente como lo escribe, y no es interpretada por el intérprete de comandos.

También puede hacer esto para el nombre de usuario, si existe la posibilidad de que incluya un signo de exclamación u otro carácter especial.

Por ejemplo:

emailsender.py -u 'username' -p 'pass!!' 
Cuestiones relacionadas