2010-07-27 43 views
31

Tôi có tập lệnh python đơn giản nhận tên người dùng và mật khẩu làm đối số. Nhưng mật khẩu của tôi chứa hai chấm than marks.When tôi gọi kịch bản:Làm thế nào để vượt qua đối số với dấu chấm than trên linux?

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

lệnh mà tôi nhập trước đó thay thế dấu chấm than

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

tôi có thể thoát khỏi dấu chấm than với dấu chéo ngược (\) nhưng thay đổi mật khẩu của tôi. Có giải pháp cho việc này hay không, làm cách nào tôi có thể thoát khỏi dấu chấm than mà không cần thay đổi mật khẩu?

+0

Lệnh thứ hai không có ý nghĩa nhiều, anh đang cố gắng làm có ?? Đặc biệt là tên người dùng 'passemailsender.py -u -p passwget wget ...' phần – adamJLev

+2

!! được thay thế bởi trình bao, nó được thay thế bằng lệnh được thực thi cuối cùng. Đây không phải là đặc trưng cho python. –

+2

@Infinity - Bash diễn dịch "!!" như lệnh cuối cùng bạn đã nhập. Vì vậy, khi anh ta vào lệnh mà không cần thoát khỏi mật khẩu của mình bằng cách sử dụng dấu nháy đơn hoặc dấu gạch chéo ngược, bash sẽ chèn lệnh cuối cùng của anh ấy vào nơi "!!" là. –

Trả lời

48

Bạn sẽ có thể chỉ cần bao bọc mọi thứ trong dấu nháy đơn trong trình bao.

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

Các bạn đã thử

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

Edit- này sẽ không làm việc. Đọc nhận xét bên dưới

+0

dấu ngoặc kép sẽ không giúp – unbeli

+2

Dấu ngoặc kép/đơn lẻ, cả hai sẽ hoạt động giống nhau trong ví dụ này. Sự khác biệt là các dấu nháy đơn không mở rộng $ VARIABLES và các dấu ngoặc kép làm. http://www.mpi-inf.mpg.de/~uwe/lehre/unixffb/quoting-guide.html – adamJLev

+2

"!!" là một biến trong bash, mặc dù, do đó, dấu nháy đơn là bắt buộc. –

16

Bạn cần phải thoát khỏi nó bằng \ hoặc báo giá bằng dấu nháy đơn, nếu không vỏ của bạn sẽ diễn giải nó.

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

hoặc

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

chỉ cho các hồ sơ, thoát hoạt động ok nếu bạn không phải là gấp đôi trích dẫn các đối số. Nếu không, '\' sẽ được ghi vào tệp theo nghĩa đen. – Bengalaa

2

Như đã đề cập bởi những người khác, vấn đề này là không cụ thể cho Python, nhưng là do cách bạn đang đi qua các tham số mật khẩu để kịch bản.

Bạn sẽ muốn quấn chuỗi mật khẩu trong dấu nháy đơn để đảm bảo rằng nó được chuyển đến tập lệnh chính xác khi bạn nhập nó và không được trình bao giải thích.

Bạn cũng có thể làm điều này cho tên người dùng, nếu có khả năng nó bao gồm dấu chấm than hoặc ký tự đặc biệt khác.

Ví dụ:

emailsender.py -u 'username' -p 'pass!!' 
Các vấn đề liên quan