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 `&'”的错误。
- 在Bash中,
解决方法
- 方法一:改用POSIX标准写法替代
|&
将命令替换为echo foo 2>&1 | cat > out,用标准的重定向语法实现相同效果,兼容sh环境。 - 方法二:指定
execSync使用Bash执行
调用execSync时通过shell参数指定使用bash,示例代码:execSync('echo foo |& cat > out', { shell: '/bin/bash' });
内容的提问来源于stack exchange,提问作者PopKernel
相关产品推荐
相关产品推荐

