Node.js相当于bash管道标准重定向

时间:2015-11-06 15:28:02

标签: node.js git bash child-process

我正在使用此命令来获取git存储库中的内容:

git archive --remote=ssh://git@git/repository.git HEAD filename.txt | tar xvOf -

该命令的第一部分将存储库中filename.txt的内容返回给标准输出。 第二部分是为了删除git自动添加到内容中的pax_global_header

我想在node.js v0.10.36

上实现此命令作为衍生的child_process

这是我尝试过的:

var git = spawn("git",  ["archive","--remote=" + repositoryUrl,"HEAD",filename]);
var tar = spawn("tar", ["xvOf", "-"]);
var out = [];
tar.stdout.pipe(git.stdout).on('data', function(data){
        var string = data.toString();
        if(string) {
            out.push(string);
        }
    });

但是当我运行它时,我在数据处理程序中得到的字符串就像git输出永远不会通过tar进程传递

我做错了什么?

1 个答案:

答案 0 :(得分:0)

我在发布此内容后10秒钟找到答案......

我应该做的是将git的输出传输到tar的输入并使用tar输出的流

所以我的代码看起来有点像这样:

    var git = spawn("git",  ["archive","--remote=" + repositoryUrl,"HEAD",filename]);
    var tar = spawn("tar", ["xvOf", "-"]);

    var out = [];
    git.stdout.pipe(tar.stdin);

    tar.stdout.on('data', function(data){
        var string = data.toString();
        if(string) {
            out.push(string);
        }
    });
....