转载

NodeJS中用child_process的exec执行cd指令为什么不工作?

下面是测试代码

var sys = require('sys'),
exec = require('child_process').exec;
exec("cd /home/ubuntu/distro", function(err, stdout, stderr) {
console.log("cd: " + err + " : " + stdout);
exec("pwd", function(err, stdout, stderr) {
console.log("pwd: " + err + " : " + stdout);
exec("git status", function(err, stdout, stderr) {
console.log("git status returned " ); console.log(err);
})
})
})

下面是输出

cd: null :
pwd: null : /
git status returned
{ [Error: Command failed: fatal: Not a git repository (or any of the parent directories): .git ] killed: false, code: 128, signal: null }

像你们看到的那样,node.js用child_process执行cd切换目录不工作。执行git status失败了,因为它没有在正确的工作目录。其它指令都是正常的。

icktoofay 回答:

每一条指令是在不同的进程中执行的。第一条 cd 指令只影响了它本身的进程。所以如果你想在指定文件夹执行 git 相关命令,你就需要指定执行路径:

exec('git status', {cwd: '/home/ubuntu/distro'}, /* ... */);

cwd只是exec众多 参数 中的其中一个.

原文  http://ourjs.com/detail/57318b0388feaf2d031d24f4
正文到此结束
Loading...