Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/git/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js相当于bash管道标准输出重定向_Node.js_Git_Bash_Child Process - Fatal编程技术网

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

Node.js相当于bash管道标准输出重定向,node.js,git,bash,child-process,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_头 我想在node.js v0.10.36上实现这个命令作为派生的child_进程 以下是我尝试过的: var git = spawn("git", ["a

我使用以下命令获取git存储库中的内容:

git archive --remote=ssh://git@git/repository.git HEAD filename.txt | tar xvOf -
命令的第一部分将存储库中filename.txt的内容返回到标准输出。 第二部分是为了删除git自动添加到内容中的pax_global_头

我想在node.js v0.10.36上实现这个命令作为派生的child_进程

以下是我尝试过的:

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);
        }
    });
....