2010-09-01 18 views
10

我試圖編寫一個bash腳本,在其中我通過獲取用戶名和密碼連接到samba服務器,然後說出$ username: $ @密碼SERVERNAME。如何在smb://的密碼字段中跳出@符號// URL

但是,如果密碼中有@,這將失敗。有沒有辦法在bash中將密碼轉義出來?

在此先感謝

更新: 我設立這個網絡打印機

lpadmin -p PRINTER -v smb://$username:[email protected] -E 

和它的作品,除了在$密碼中有一個@符號的情況; $用戶名和$密碼變量從閱讀stdin

+0

只是雙引號變量 – ghostdog74 2010-09-01 01:34:11

+1

我認爲問題不在於bash,而是讓Samba識別密碼中的'@'和哪個'@'標記密碼的結尾。我懷疑有辦法做到這一點,但如果有的話,您需要查看Samba手冊以獲取信息。 「醫生,醫生,當我這樣打我自己時疼嗎?」?換句話說,不要在密碼中使用'@',因爲它會導致悲傷。 – 2010-09-01 01:50:58

+1

也許嘗試用'%40'替換所有的'@'...我不認爲它會起作用,但也許這是關鍵。使用'$ password = $ {password // @ /%40}'替換它們。 – dreamlax 2010-09-01 04:16:56

回答

5

啊,不,這實際上不是爲Bash引用的問題,而是爲Samba引用。你有這樣的:

lpadmin -p PRINTER -v smb://$username:[email protected] -E 

這猛砸忠實地擴展到

lpadmin -p PRINTER -v smb://alice:[email protected]@SERVER -E 

然後Samba客戶庫認爲密碼在第一個@符號結束,它應該連接到名爲[email protected]服務器,不用介意你實際上不能把這個名字放在DNS中。

lpadmin來自CUPS,而不是從桑巴(here is its manpage),並通過這些文檔閱讀了一下,我想你可以使用此替代語法:

lpadmin -p PRINTER -U "${username}%${password}" -v smb://SERVER -E 

我很驚訝逃逸@爲但是,%40不起作用。看起來像在我的samba客戶端庫中的錯誤。

+0

你是對的,它是桑巴舞;我已經更新了這個問題,以反映您要求的內容。 – codersarepeople 2010-09-01 04:09:18

+0

謝謝!更新了我的答案,可能實際上爲您解決了一些問題。 – zwol 2010-09-01 05:07:04

+0

-U的東西有用嗎? – zwol 2010-09-01 15:53:32

3

我使用杯子管理員在http://localhost:631/添加打印機。編碼@ as%40爲我工作。

+0

也爲我工作。 – Ingo 2013-07-22 09:28:23