我怎样才能使用'>'在Node.js中重定向输出?

时间:2012-04-03 21:15:02

标签: javascript linux node.js

例如,假设我希望复制简单命令

echo testing > temp.txt

这就是我试过的

var util  = require('util'),
    spawn = require('child_process').spawn;

var cat = spawn('echo', ['> temp.txt']);
cat.stdin.write("testing");
cat.stdin.end();

不幸的是没有成功

4 个答案:

答案 0 :(得分:4)

您不能将重定向字符(>)作为参数传递给spawn,因为它不是命令的有效参数。 您可以使用exec而不是spawn,它会在单独的shell中执行您提供的任何命令字符串,或采用以下方法:

var cat = spawn('echo', ['testing']);

cat.stdout.on('data', function(data) {
    fs.writeFile('temp.txt', data, function (err) {
        if (err) throw err;
    });
});

答案 1 :(得分:0)

您可以管道节点控制台输出la"节点foo.js> output.txt的"或者您可以使用fs包进行文件编写

答案 2 :(得分:0)

echo似乎没有阻止stdin:

~$ echo "hello" | echo
~$

^那里没有输出......

所以你可以试试这个:

var cat = spawn('tee', ['temp.txt']);
cat.stdin.write("testing");
cat.stdin.end();

我不知道这对你是否有用。

答案 3 :(得分:0)

使用exec

const { exec } = require( "child_process" );

exec( "echo > temp.txt" );

不确定execspawn之间的优缺点,但这确实使您可以轻松地运行完整命令并将其写入或追加到文件中。