下面是测试代码
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众多 参数 中的其中一个.