2016-11-08 69 views
1

我有一個bash腳本從網站下載數據。爲此,我需要使用該網站的Java客戶端傳遞用戶名和密碼。我的密碼有一個導致問題的特殊字符。我已經嘗試了通常的解決方案,但都沒有工作。bash:如何傳遞包含特殊字符的密碼

#!/bin/sh 
#$ -cwd 

MYPASSWORD='password&123' 

java -jar client.jar -p username $MYPASSWORD file.gz 

嘗試使用\直接在命令中或使用變量。但那沒有用。登錄失敗!

MYPASSWORD=password\&123 
java -jar client.jar -p username $MYPASSWORD file.gz 

試過「」或「'。登錄失敗。

MYPASSWORD='password&123' 
java -jar client.jar -p username "\"$MYPASSWORD\"" file.gz 

也試過了,沒有運氣。 MYPASSWORD ='密碼'「&」'123'

任何建議將是最有幫助的。重置此網站上的密碼似乎也有問題。

+1

可能嘗試三重簡單報價(''')爲封閉? – F4240

+1

你能否使用這個java程序來下載沒有bash腳本的文件?如果程序不能在腳本之外工作,它將不能在腳本內工作。 –

+0

F4240的含義是:你試過'$ {MYPASSWORD}'嗎? – GhostCat

回答

2

只需引用參數。

mypassword='password&123' 
java -jar client.jar -p username "$mypassword" file.gz 

的引號只有從執行值的mypassword的任何進一步的處理保持殼體中的參數被膨脹之後。您實際上不會將引號傳遞給您的程序。

+0

沒有沒有工作。再次登錄失敗。 – user19758

+1

那麼問題不在於shell;你輸入的密碼是錯誤的,或者Java程序在內部處理不當。 – chepner

+0

(唯一的其他情況是,如果你的密碼包含一個單引號,不能包含在單引號字符串中:'foo ='bob'spassword''不會將'foo'設置爲'bob'spass 'word',而是引用字符串'bob'和未加引號的字符串'spass'以及未加引號的字符串'word'的連接。 – chepner