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);
}
});
....
我正在使用此命令获取 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
这是我试过的方法:
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);
}
});
....