V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Distributions
Ubuntu
Fedora
CentOS
中文资源站
网易开源镜像站
vjnjc
V2EX  ›  Linux

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

  •  
  •   vjnjc · 2017-03-23 17:18:26 +08:00 · 2437 次点击
    这是一个创建于 2563 天前的主题,其中的信息可能已经有所发展或是发生改变。
    有一个正确命令:
    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"
    第 1 条附言  ·  2017-03-24 11:22:15 +08:00
    多谢各位 v 友,防止 argumen 里面注入非法字符有 2 种,
    1. 在每个非法字符前面用\转义。
    2. 用单引号'' 来包裹 argument 。
    11 条回复    2017-03-24 11:20:48 +08:00
    dzxx36gyy
        1
    dzxx36gyy  
       2017-03-23 17:22:41 +08:00 via Android   ❤️ 1
    试试单引号?
    lslqtz
        2
    lslqtz  
       2017-03-23 17:28:18 +08:00 via iPhone   ❤️ 1
    当然是转义
    momocraft
        3
    momocraft  
       2017-03-23 17:32:52 +08:00   ❤️ 1
    " ' \
    QAPTEAWH
        4
    QAPTEAWH  
       2017-03-23 17:42:08 +08:00   ❤️ 1
    还好密码不是
    ;rm -rf /
    vjnjc
        5
    vjnjc  
    OP
       2017-03-23 17:47:44 +08:00
    @dzxx36gyy 在每个$前面加\有效。但我想找一个一劳永逸的 wrapper ,不知道有没有这种东西
    vjnjc
        6
    vjnjc  
    OP
       2017-03-23 17:48:46 +08:00
    @lslqtz 转义符有效,我想问有没有 wrapper 让参数形成一个整体的用法
    vjnjc
        7
    vjnjc  
    OP
       2017-03-23 17:49:33 +08:00
    @QAPTEAWH 是呀,被我不小心注入了。。。
    vjnjc
        8
    vjnjc  
    OP
       2017-03-23 17:50:18 +08:00
    @momocraft 我用单个斜杠就 ok 了,能不能麻烦解释下"'是干嘛用的呀?
    66450146
        9
    66450146  
       2017-03-23 19:12:21 +08:00   ❤️ 2
    > echo $var

    > export var=passwd
    > echo $var
    passwd
    > echo \$var
    $var
    > echo "$var"
    passwd
    > echo '$var'
    $var
    iNohn
        10
    iNohn  
       2017-03-24 11:03:11 +08:00   ❤️ 1
    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
        11
    vjnjc  
    OP
       2017-03-24 11:20:48 +08:00
    @dzxx36gyy 多谢单引号有效。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   2884 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 13:06 · PVG 21:06 · LAX 06:06 · JFK 09:06
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.