收藏
回答

在bash环境下,命令行工具上传代码时对空格参数的处理有些问题?

框架类型 问题类型 操作系统 工具版本
小程序 Bug macOS Stable 1.03.2009140

在bash环境下,命令行工具似乎对参数里边的空格的处理有点问题?

#!/bin/bash
cli upload --project "/path/to/project" -v 1.0.0 -d "desc with spaces" -i "/path/to/info" --debug


执行日志:

[info] args {
  _: [ 'upload', 'with', 'spaces' ],
  project: '/path/to/project',
  v: '1.0.0',
  version: '1.0.0',
  d: 'desc',
  desc: 'desc',
  i: '/path/to/info',
  'info-output': '/path/to/info',
  infoOutput: '/path/to/info',
  debug: true,
  '$0': 'js/common/cli/index.js'
}
[info] installPath /Applications/wechatwebdevtools.app/Contents/MacOS
[info] userDirPath /Users/username/Library/Application Support/微信开发者工具/xxxxx/Default
[info] appPath /Applications/wechatwebdevtools.app/Contents/MacOS/wechatwebdevtools
⠋ initialize
[info] updatePort cliport=3799
[info] connect upgrade response 200


[info] ws connect xxxxx xxxxxx


[info] long connection established
✔ IDE server has started, listening on http://127.0.0.1:35882
✔ Using AppID: xxxxxxxxxxx
⠼ Uploading
┌─────────┬────────────┬─────────────┐
│ (index) │    size    │ size (Byte) │
├─────────┼────────────┼─────────────┤
│  TOTAL  │ '495.1 KB' │   506977    │
└─────────┴────────────┴─────────────┘


✔ upload


这里执行下来,后台看到的项目备注是 desc, 空格后边的描述就没了。从日志上看,似乎 with 被当成是另一个参数了?

但是如果环境换成 zsh,那就没有什么问题:

#!/bin/zsh
cli upload --project "/path/to/project" -v 1.0.0 -d "desc with spaces" -i "/path/to/info" --debug


执行日志:

[info] args {
  _: [ 'upload' ],
  project: '/path/to/project',
  v: '1.3.2',
  version: '1.3.2',
  d: 'desc with spaces',
  desc: 'desc with spaces',
  i: '/path/to/info',
  'info-output': '/path/to/info',
  infoOutput: '/path/to/info',
  debug: true,
  '$0': 'js/common/cli/index.js'
}
[info] installPath /Applications/wechatwebdevtools.app/Contents/MacOS
[info] userDirPath /Users/username/Library/Application Support/微信开发者工具/xxxx/Default
[info] appPath /Applications/wechatwebdevtools.app/Contents/MacOS/wechatwebdevtools
⠋ initialize
[info] updatePort cliport=3799
[info] connect upgrade response 200


[info] ws connect 19399 xxxxxx xxxxxx


[info] long connection established
✔ IDE server has started, listening on http://127.0.0.1:35882
✔ Using AppID: xxxxxxxx
⠹ Uploading
┌─────────┬────────────┬─────────────┐
│ (index) │    size    │ size (Byte) │
├─────────┼────────────┼─────────────┤
│  TOTAL  │ '495.1 KB' │   506977    │
└─────────┴────────────┴─────────────┘


✔ upload
最后一次编辑于  2020-10-19
回答关注问题邀请回答
收藏

2 个回答

  • 邓坤力
    邓坤力
    2020-10-19

    这应该与你的 bash 版本有关,这也是 bash 在字符串中使用空格的问题,可以参考 https://stackoverflow.com/questions/37367841/bash-how-to-add-space-in-string

    2020-10-19
    有用
    回复 2
    • class.lfz
      class.lfz
      2020-10-20
      bash --version
      GNU bash, version 5.0.18(1)-release (x86_64-apple-darwin19.5.0)
      Copyright (C) 2019 Free Software Foundation, Inc.
      License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>


      This is free software; you are free to change and redistribute it.
      There is NO WARRANTY, to the extent permitted by law.


      应该是最新的版本了,还是一样的问题。
      2020-10-20
      回复
    • class.lfz
      class.lfz
      2020-10-20
      忘了贴执行脚本了:
      #!/bin/bash
      desc="desc-with-spaces"
      cli upload --project "/path/to/project" -v 1.0.0 -d "${desc//-/ }" -i "/path/to/info" --debug



       备注信息就只有 desc 后边依旧没有内容,如果上边的脚本改成:
      #!/bin/bash
      desc="desc-with-spaces"
      cli upload --project "/path/to/project" -v 1.0.0 -d "${desc//-/ -}" -i "/path/to/info" --debug
      这里使用了 空格- 来代替空格,然后它就不会执行上传了,而是出现帮助说明,原因应该是cli解读 -with 的时候发现不存在这个参数,然后展示帮助说明了?
      2020-10-20
      回复
  • class.lfz
    class.lfz
    2020-10-20

    问题找到了,不好意思,这个是我这边的问题。

    我是通过package.scripts来执行对应的脚本的,为了解决cli可能存在不同安装位置的问题,写了一个 .bashrc 文件用来引用 cli 路径:

    # wxcli
    function wxcli() {
        /Applications/wechatwebdevtools.app/Contents/MacOS/cli $@
    }
    export -f wxcli
    


    但是尴尬的事情发生了,用 $@ 来传递参数,似乎在bash环境下就会将参数里边的空格切开,从而导致了我上边的错误。

    2020-10-20
    有用
    回复
登录 后发表内容
问题标签