You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Node.js execSync执行含|&的Shell命令报错求助

问题原因分析
  • 核心原因:|&是Bash专属的扩展语法,但Node.js的execSync默认调用系统的/bin/sh执行命令,而sh(如dash这类POSIX标准shell)不支持该语法,因此触发语法错误。
  • 细节拆解:
    • 在Bash中,cmd1 |& cmd2是cmd1 2>&1 | cmd2的简化写法,作用是将前序命令的标准输出(stdout)和标准错误(stderr)同时通过管道传递给后续命令。
    • 普通管道符|属于POSIX标准语法,所有符合标准的shell都支持,所以能正常执行;但|&是Bash独有的扩展,sh无法识别,才会报出“unexpected token `&'”的错误。
解决方法
  • 方法一:改用POSIX标准写法替代|&
    将命令替换为echo foo 2>&1 | cat > out,用标准的重定向语法实现相同效果,兼容sh环境。
  • 方法二:指定execSync使用Bash执行
    调用execSync时通过shell参数指定使用bash,示例代码:
    execSync('echo foo |& cat > out', { shell: '/bin/bash' });
    

内容的提问来源于stack exchange,提问作者PopKernel

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.23 11:14:54