var exec = require('ssh-exec');
var fs = require('fs');
file = fs.createWriteStream('rep-output.txt');
process.stdin
.pipe(exec(command, host))
.pipe(file);
file.end();
这里是:
[node]$ cat rep-output.txt
[node]$
但因为'command'是'touch output.txt'我可以看到它在远程'host'上正确执行:
[remote]$ ls -l output.txt
[remote]$-rw-rw-r-- 1 irekr irekr 0 Jul 4 10:53 output.txt
如果'command'即'ls -l'仍然'rep-output.txt'为空
答案 0 :(得分:3)
我认为这是因为您在写入之前关闭了流。删除file.end()
file = fs.createWriteStream('rep-output.txt');
process.stdin
.pipe(exec(command, host))
.pipe(file);
当您pipe
流时,它将在输入流结束时负责结束写入流。见doc:
默认情况下,当源流在目标上调用end() 发出结束,因此目标不再可写。通过{结束: false}作为保持目标流打开的选项。