我有一个grunt-shell命令,它使用大括号展开来显示文件。
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工作?
发布于 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的示例
cpImgTmp: {
command: 'cp ./app/images/{*.png,*.jpg,*.ico} tmp/images',
options: {
execOptions: {shell: '/bin/bash'}
}
}https://stackoverflow.com/questions/53653191
复制相似问题