代码之家  ›  专栏  ›  技术社区  ›  Luis Estevez

带有大括号扩展的NodeJS Exec cp给出了不同的结果。为什么?

  •  0
  • Luis Estevez  · 技术社区  · 7 年前

    我有一个gruntshell命令,它使用大括号扩展对cp文件进行映像。

    file: Gruntfile.js
    cpImgTmp: {
        command: 'cp ./app/images/{*.png,*.jpg,*.ico} tmp/images' 
    }
    

    我搜索了grunt shell库,发现它使用了exec函数。 我在受控环境中再次测试了该命令

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

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

    我在ubuntu服务器终端中成功地执行了这个命令。 所以我的

    1 回复  |  直到 7 年前
        1
  •  0
  •   Luis Estevez    7 年前

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

    问题是 sh bash 在我的Mac电脑上, 嘘 嘘 符号链接到 dash (根据结果,这显然不支持支撑扩展)。

    解决办法是通过考试 {shell: '/bin/bash' }使大括号扩展在unix系统中而不是默认的“/bin/sh”shell中工作。

    使用NodeJS的示例 exec 函数:`exec('cp./app/images/{ .png,

    使用grunt shell的示例

    cpImgTmp: {
        command: 'cp ./app/images/{*.png,*.jpg,*.ico} tmp/images',
        options: {
            execOptions: {shell: '/bin/bash'}
        }
    }
    
    推荐文章