命令行传参的时候, 请问如何防止参数带有特殊符号,使得整行命令 broke?

2017-03-23 17:18:26 +08:00
 vjnjc
有一个正确命令:
keytool -exportcert -alias androiddebugkey -keypass android -keystore debug.keystore -storepass android

其中我的 key 密码是 android -storepass android ,但是当密码带有$符号的时候,整行命令就 broken 了呀

错误的命令:
keytool -exportcert -alias androiddebugkey -keypass android -keystore debug.keystore -storepass andr$oid

这行命令会解析失败,因为其中的$貌似会被识别为变量的前置。

请问有没有类似""的 wrapper 能够包裹住变量的东西呀?
尝试过用引号, wrapper 失败。。
keytool -exportcert -alias androiddebugkey -keypass android -keystore debug.keystore -storepass "andr$oid"
2612 次点击
所在节点    Linux
11 条回复
dzxx36gyy
2017-03-23 17:22:41 +08:00
试试单引号?
lslqtz
2017-03-23 17:28:18 +08:00
当然是转义
momocraft
2017-03-23 17:32:52 +08:00
" ' \
QAPTEAWH
2017-03-23 17:42:08 +08:00
还好密码不是
;rm -rf /
vjnjc
2017-03-23 17:47:44 +08:00
@dzxx36gyy 在每个$前面加\有效。但我想找一个一劳永逸的 wrapper ,不知道有没有这种东西
vjnjc
2017-03-23 17:48:46 +08:00
@lslqtz 转义符有效,我想问有没有 wrapper 让参数形成一个整体的用法
vjnjc
2017-03-23 17:49:33 +08:00
@QAPTEAWH 是呀,被我不小心注入了。。。
vjnjc
2017-03-23 17:50:18 +08:00
@momocraft 我用单个斜杠就 ok 了,能不能麻烦解释下"'是干嘛用的呀?
66450146
2017-03-23 19:12:21 +08:00
> echo $var

> export var=passwd
> echo $var
passwd
> echo \$var
$var
> echo "$var"
passwd
> echo '$var'
$var
iNohn
2017-03-24 11:03:11 +08:00
Linux:
cat | xargs -i keytool -exportcert -alias androiddebugkey -keypass android -keystore debug.keystore -storepass {}

Mac:
cat | xargs -I {} keytool -exportcert -alias androiddebugkey -keypass android -keystore debug.keystore -storepass {}
( xargs 后面是大写的 i ,不是小写的 L )

然后把密码粘贴进去,回车, ctrl + c
不过如果 keytool 本身需要标准输入流的话可能会跪
vjnjc
2017-03-24 11:20:48 +08:00
@dzxx36gyy 多谢单引号有效。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/349792

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX