child process api可用于在node.js中执行shell脚本。
我使用 child_process.exec(命令[,选项],回调)功能
作为一个选项,exec的用户可以设置shell:'/ path / to / shell'字段来选择要使用的shell。 (默认为'/ bin / sh')
设置{shell:'/ bin / bash'}的选项并不会让exec使用bash来破坏命令。
我通过发出命令“echo $ 0”来验证这一点,该命令打印“/ bin / sh”。
如何通过shell选项将bash与child_process.exec一起使用?
(我的目标是在bashrc中使用我的路径定义,现在当我尝试使用grunt时,无法找到二进制文件。设置cwd,选项字典中的当前工作目录按预期工作)
-----------------更新,示例
'use strict';
var cp = require('child_process');
cp.exec('echo $0', { shell: '/bin/bash' }, function(err, stdout, stderr){
if(err){
console.log(err);
console.log(stderr);
}
console.log(stdout);
});
输出:
/bin/sh
which bash
打印: /斌/庆典
答案 0 :(得分:4)
可能在您的设置中或在代码中错误地传递选项。由于您没有发布您的代码,因此很难说清楚。但我能够做到以下工作(使用节点4.1.1):
"use strict";
const exec = require('child_process').exec
let child = exec('time',{shell: '/bin/bash'}, (err, stdout, stderr) => {
console.log('this is with bash',stdout, stderr)
})
let child2 = exec('time',{shell: '/bin/sh'}, (err, stdout, stderr) => {
console.log('This is with sh', stdout, stderr)
})
输出将是:
this is with bash
real 0m0.000s
user 0m0.000s
sys 0m0.000s
This is with sh /bin/sh: 1: time: not found
我使用time
作为命令,因为它是bash有的而sh不是。我希望这有帮助!