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


发布者 ourjs  发布时间 1462864643170
关键字 JS学习  JavaScript 
下面是测试代码

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众多参数中的其中一个.