MKDIR不能在Linux NPM脚本的工作,但在Mac
问题描述:
我有一个"prebuild"
脚本,执行以下操作:MKDIR不能在Linux NPM脚本的工作,但在Mac
mkdir -p dist/{server,shared,client/{css,js,fonts,img}}
我想为这个创造结构像这样:
dist
server
shared
client
css
js
fonts
img
当我从终端上运行mkdir
命令时,它有正确的输出。但是,如果我把这个命令作为NPM脚本,像这样:
的package.json
{
"scripts": {
"prebuild": "mkdir -p dist/{server,shared,client/{css,js,fonts,img}}"
}
}
,然后当我做npm run prebuild
,它仅创建一个奇怪的名字一个文件夹:{server,shared,client
。
所以在Ubuntu上,它只在你直接输入命令时才起作用,但如果你把它放在npm脚本中,你会遇到这个问题。在Mac上,它可以工作。
有谁知道为什么会发生这种情况?
答
npm
使用/bin/sh
执行脚本,但Ubuntu使用dash
作为其POSIX外壳,而Mac OS X使用bash
。支架扩展是一个bash
功能,其中dash
不具有。
bash
(错误地,我会争辩)当调用为sh
时仍然会处理大括号扩展。
答
来自chepner的很好的解释。我已经添加到答案给出一个解决方案。创建一个到bash shell的链接将允许你从npm脚本运行bash命令。
$ sudo ln -sf bash /bin/sh
希望这可以帮助其他人在Ubuntu中遇到这个问题。
感谢您的回答! – saadq
@meh_programmer请考虑接受这是正确的答案,通过点击投票计数旁边的空白勾号/复选标记,以便chepner奖励积分,其他人知道它是正确的。 –
完成,抱歉忘了等15分钟后再做 – saadq