1

当使用下面的代码tail一个文件时,我们可以成功输出数据。

var spawn = require('child_process').spawn;
var filename = '/logs/error.log';
var tail = spawn("tail", ["-f", filename]);
tail.stdout.on("data", function (data) {
    console.log(data);
});

但是当我将文件名更改为“/logs/*.log”时,我没有找到任何输出。谁能告诉我是什么原因?谢谢!

4

2 回答 2

2

在控制台输入tail -f /logs/*.log时,扩展/logs/*.log由 shell 处理;当tail程序得到参数时,它们已经被扩展为tail -f /logs/error.log /logs/other.log. 您需要自己为 Node 进行扩展:

var fs = require('fs');
var spawn = require('child_process').spawn;
var filename = fs.readdirSync('/logs').map(function(file) { return '/logs/' + file });
var tail = spawn("tail", ["-f"].concat(filename));
tail.stdout.on("data", function (data) {
    console.log(data);
});
于 2012-07-17T03:00:57.663 回答
0

因为既不tail也不spawn知道如何将带有通配符的文件名扩展为匹配的文件名集合。这通常由 shell 执行,因此在这种情况下,您需要自己在代码中执行此操作。

于 2012-07-17T03:00:05.337 回答