首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >带支撑扩展的NodeJS Exec给出了不同的结果。为什么?

带支撑扩展的NodeJS Exec给出了不同的结果。为什么?
EN

Stack Overflow用户
提问于 2018-12-06 14:06:50
回答 1查看 191关注 0票数 0

我有一个grunt-shell命令,它使用大括号展开来显示文件。

代码语言:javascript
复制
file: Gruntfile.js
cpImgTmp: {
    command: 'cp ./app/images/{*.png,*.jpg,*.ico} tmp/images' 
}

当我在MacOS上运行这个grunt-shell命令时,它会执行预期的操作,但返回“不能cp.”对ubuntu的错误。

我搜索了grunt-shell库并注意到它使用了exec函数。我在受控环境中再次测试了该命令。

exec('cp ./app/images/{*.png,*.jpg,*.ico} tmp/images')

经验证的exec函数的派生are是相同的:

['/bin/sh', '-c', 'cp ./app/images/{*.png,*.jpg,*.ico} tmp/images']

我在ubuntu服务器终端成功地执行了命令。因此,我的问题是nodejs在不同环境中处理大括号扩展的问题,我可以向nodejs传递哪些选项来使此命令跨unix工作?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-12-09 06:17:47

我认为这不是nodejs问题,而是nodejs可以避免的unix问题。

问题是sh不支持大括号扩展,bash支持。在我的Mac上,sh 是指向 bash的符号链接,ubuntu (18.04) sh 是指向 dash的符号链接(从结果来看,这显然不支持支撑扩展)。

解决方案是通过{shell: '/bin/bash'}使支撑展开在unix系统中工作,而不是默认的'/bin/sh‘shell。

使用NodeJS exec函数的示例:‘`exec('cp ./app/映像/{.png,.jpg,*.ico} tmp/映像’,{shell:'/bin/bash'})

使用grunt-shell的示例

代码语言:javascript
复制
cpImgTmp: {
    command: 'cp ./app/images/{*.png,*.jpg,*.ico} tmp/images',
    options: {
        execOptions: {shell: '/bin/bash'}
    }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53653191

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档