Для grep
аргументов -e
позволяет указать несколько шаблонов:
grep -e 1 -e 2
JS для генерации аргументов будет примерно таким:
const needles = ["find", "me", "or", "me"];
const grep_pattern_args = needles.reduce((res, pattern) => {
res.push('-e', pattern)
return res
}, [])
const grep_args = [ '--count', '--fixed-strings', ...grep_pattern_args ]
3000 игл направляются в зону поражения execve
s ограничение длины MAX_ARG_STRLEN
в Linux 128kB . Если у вас длинные иглы, вам может потребоваться записать их в файл в любом случае, чтобы быть в безопасности.
spawn
хорошо, так как вы получаете записываемый поток обратно для stdin
, который вы можете писать так, как haystack
читается / генерируется (при условии, что ваша настройка примера потока Readable
надумана)
const stdout = []
const stderr = []
const fgrep = spawn('/usr/bin/fgrep', grep_args, { stdio: ['pipe', 'pipe', 'pipe'] })
fgrep.on('error', console.error)
// For larger output you can process more on the stream.
fgrep.stdout.on('data', chunk => stdout.push(chunk))
fgrep.stderr.on('data', chunk => {
process.stderr.write(chunk)
stderr.push(chunk)
})
fgrep.on('close', (code) => {
if (code !== 0) console.error(`grep process exited with code ${code}`)
stdout.map(chunk => process.stdout.write(chunk))
})
fgrep.stdin.pipe(haystream)