saa*_*adq 1 linux bash ubuntu node.js npm
我有一个"prebuild"脚本执行以下操作:
mkdir -p dist/{server,shared,client/{css,js,fonts,img}}
Run Code Online (Sandbox Code Playgroud)
我想为此创建一个这样的结构:
dist
server
shared
client
css
js
fonts
img
Run Code Online (Sandbox Code Playgroud)
当我mkdir从终端运行命令时,它具有正确的输出.但是,如果我将此命令作为npm脚本,如下所示:
的package.json
{
"scripts": {
"prebuild": "mkdir -p dist/{server,shared,client/{css,js,fonts,img}}"
}
}
Run Code Online (Sandbox Code Playgroud)
然后,当我这样做时npm run prebuild,它只会创建一个名称奇怪的单个文件夹:{server,shared,client.
所以在Ubuntu上,它只能在你直接输入命令时起作用,但是如果你把它放在一个npm脚本中就会遇到这个问题.在Mac上,它可以正常工作.
有谁知道为什么会这样?
npm用于/bin/sh执行脚本,但Ubuntu dash用作其POSIX shell,而Mac OS X使用bash.支撑扩展是一项bash功能,dash没有.
bash(错误地,我认为)在调用时仍会处理大括号扩展sh.