在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
这应该与你的 bash 版本有关,这也是 bash 在字符串中使用空格的问题,可以参考 https://stackoverflow.com/questions/37367841/bash-how-to-add-space-in-string
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.
应该是最新的版本了,还是一样的问题。
#!/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 的时候发现不存在这个参数,然后展示帮助说明了?
问题找到了,不好意思,这个是我这边的问题。
我是通过package.scripts来执行对应的脚本的,为了解决cli可能存在不同安装位置的问题,写了一个 .bashrc 文件用来引用 cli 路径:
# wxcli function wxcli() { /Applications/wechatwebdevtools.app/Contents/MacOS/cli $@ } export -f wxcli
但是尴尬的事情发生了,用 $@ 来传递参数,似乎在bash环境下就会将参数里边的空格切开,从而导致了我上边的错误。