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

Node.js equivalent of bash pipe stdout redirection

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

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

命令的第一部分returns将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 进程

我做错了什么?

我在发布这篇文章后 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);
        }
    });
....