2016-11-08 65 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

相关问题