2010-07-27 51 views
31

我有簡單的python腳本接收用戶名和密碼作爲參數。但我的密碼包含兩個感嘆號marks.When我叫腳本:如何在Linux上通過帶感嘆號的參數?

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

的命令,我早先進入更換感嘆號

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

我可以逃避感嘆號用反斜線(\),但我的密碼更改。 有沒有解決方案,我怎樣才能不更改密碼逃脫感嘆號?

+0

第二個命令沒有太大的意義,什麼是你想在那裏做?特別是'passemailsender.py -u用戶名-p passwget wget ...'部分 – adamJLev 2010-07-27 18:12:07

+2

!!被shell替代,它被上一次執行的命令取代。這不是python專用的。 – 2010-07-27 18:14:42

+2

@Infinity - Bash解釋「!!」作爲你輸入的最後一個命令。因此,當他使用單引號或反斜槓輸入命令而不用轉義密碼時,bash將其最後一個命令插入「!!」是。 – 2010-07-27 18:16:31

回答

48

你應該能夠簡單地將東西用單引號包裝在shell中。

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

你試過

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

編輯 - 這是行不通的。閱讀下面的評論

+0

雙引號不會幫助 – unbeli 2010-07-27 18:13:56

+2

雙/單引號,在這個例子中兩者都會起作用。區別在於單引號不會擴展$ VARIABLES,並且雙引號可以。 http://www.mpi-inf.mpg.de/~uwe/lehre/unixffb/quoting-guide.html – adamJLev 2010-07-27 18:17:29

+2

「!!」在bash中是一個變量,但是,所以需要單引號。 – 2010-07-27 18:43:04

16

您需要\逃避或用單引號引用它,否則你的shell解釋它。

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

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

只是爲了記錄,轉義作品好吧,如果你不是雙引號的話。否則,'\'將直接寫入文件。 – Bengalaa 2015-06-13 15:49:45

2

正如其他人所提到的,這個問題不是特定於Python的,而是由你如何傳遞密碼參數給腳本引起的。

您需要將密碼字符串封裝在單引號中,以確保它完全按照鍵入的方式傳遞給腳本,並且不會被shell解釋。

如果可能包含感嘆號或其他特殊字符,您也可以爲用戶名執行此操作。

例如:

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