Node.js相当于bash管道标准输出重定向
我使用以下命令获取git存储库中的内容: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 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);
}
});
....