javascript - 如何使用大括号通过 "shelljs"在单个命令中创建多个目录?

标签 javascript node.js bash ubuntu-18.04 shelljs

如果您在 Linux 终端中运行此命令:

mkdir -p ./dist/{articles,scripts,stylesheets}

它将创建以下文件夹树(在当前目录中):

dist
|- articles
|- scripts
|- stylesheets

当我尝试使用 shelljs 执行相同操作时,会出现问题npm 包。

例如调用以下函数:

shell.mkdir("-p", "./dist/{articles,scripts,stylesheets}");

导致创建以下文件树:

dist
|- {articles,scripts,stylesheets}

换句话说,它是一个名为 dist 的文件夹,其中包含一个名为 {articles,scripts,stylesheets} 的子文件夹。

我尝试转义大括号,如下所示:

shell.mkdir("-p", "./dist/\{articles,scripts,stylesheets\}");

它不起作用,所以我加倍努力并转义了反斜杠:

shell.mkdir("-p", "./dist/\\{articles,scripts,stylesheets\\}");

这也不起作用,所以我再次加倍努力,在转义反斜杠之前添加了一个转义反斜杠:

shell.mkdir("-p", "./dist/\\\\{articles,scripts,stylesheets\\\\}");

这不起作用,但它确实创建了一个具有不同名称的文件夹:

\\{articles,scripts,stylesheets\\}

如何解决这个问题?

最佳答案

正确的方法是使用循环或类似的方式重写大括号扩展:

const shell = require('shelljs')
for(var dir of ["articles", "scripts", "stylesheets"]) {
  shelljs.mkdir("-p", "./dist/" + dir)
}

它快速、强大且便携。

同样,您可以使用 third party library为您扩展它们:

const shell = require('shelljs')
const braces = require('braces')
shell.mkdir("-p", braces("./dist/{articles,scripts,stylesheets}", {expand: true}))

字面上的方法是显式调用 Bash,因为大括号扩展是 bash 的一项功能:

shelljs.exec("bash -c 'mkdir -p ./dist/{articles,scripts,stylesheets}'")

这是缓慢、脆弱且不可移植的,因为它需要两次调用两个 Unix shell 和两个相应级别的转义。

shelljs的目的是用纯JS实现替换这样的代码,这样它就需要零调用零个shell,所以这完全违背了使用它的初衷。

关于javascript - 如何使用大括号通过 "shelljs"在单个命令中创建多个目录?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56184584/

相关文章:

javascript - 显示从 API 调用中以二进制数据形式返回的图像

javascript - Next tick override functionality does 函数将被调用

javascript - Jquery 旋转轨道与项目

javascript - 可能会与 busboy 一起发出错误?

javascript - 通过 NodeJS 获取 JSON 数据时,如何通过 ExpressJS 更新我的 EJS 模板?

javascript - D3 v4 - d3.zoom() 防止绑定(bind)某些事件,但在 Window 上除外

node.js - 消息上的 Express websockets 获取 cookie 信息

linux - 如何在 bash 中禁用 'zip' 警告?

linux - 更新配置文件的shell命令

node.js - 使用 Bash 和 NPM 替换配置中的 env 失败