如何在终端中传递带引号和单引号的密码?

时间:2015-04-13 21:03:31

标签: android bash shell apk keytool

我为我的Android应用程序创建了一个.keystore,生成一个随机密码。它在同一密码中包含引号(")和单引号('),如下所示:xxxxxx" xxx!\ x =' x

我正在尝试使用keytool传递密码。我怎样才能传递密码?

keytool -list -storepass "<my_password>" -keystore my.keystore

并显示:

  

-bash:!\ xx&#39; x&#34;:未找到事件

谢谢!

修改 我尝试使用:

keytool -list -storepass xxxxxx\"xxx\!x=\'x -keystore my.keystore
  

keytool错误:java.io.IOException:Keystore被篡改,或   密码不正确

3 个答案:

答案 0 :(得分:0)

不幸的是我猜你必须逃避特殊字符,如下:

xxxxxx\"xxx\\!xx\'x

答案 1 :(得分:0)

如果你不知道历史扩展是什么,你不能使用它,或者你不知道你是否使用它,将set +H追加到你的.bashrc禁用它。这将阻止交互式bash会话搞乱你那么好的感叹号。

您也可以从提示符处运行set +H以禁用该会话:

$ echo "!foo"
bash: !foo: event not found

$ set +H

$ echo "!foo"
!foo

或者,您可以通过在单引号中添加感叹号来解决此问题:

$ echo "fo'o!ba\\r"
bash: !ba\\r: event not found

$ echo "fo'o"'!'"ba\\r"
fo'o!ba\r

此处双引号字符串按原样使用,但!替换为"'!'",它会关闭双引号,启动单引号段,添加!,然后关闭单引号并再次打开双引号字符串。

答案 2 :(得分:0)

我会将密码粘贴到变量

pass='xxxxxx"xxx!\x='\''x'

'\''位是在bash中将单引号嵌入单引号字符串的一种方法。

然后你可以在双引号中使用变量

cmd -p "$pass"