child_process使'命令失败'执行grep

时间:2017-12-13 01:14:45

标签: node.js bash grep

我想在节点中使用child_process搜索文件的存在:

const { exec } = require('child_process');
exec('ls | grep "filename"', (err, result) => {...})

当文件名存在时,exec结果很好。但是当文件名不存在时,我收到一个错误:

  

命令失败:ls | grep“filename”

在这种情况下,如何判断执行命令是错误,还是仅仅因为没有找到结果?

修改

感谢有关不以这种方式搜索文件的建议。上面的代码不是实际的代码,只是一个演示文章,用于说明grep的问题。在我的实际案例中,我在task spooler的输出中搜索关键字,因此我使用了exectsp -l | grep ...

1 个答案:

答案 0 :(得分:2)

您可以通过查看回调中err.code的值来确定这一点。它在Node.js docs中有更详细的记录。

由于管道中的最后一个命令是grep,请查阅grep联机帮助页以获取完整的状态代码列表,以便适当地分支逻辑。在您的情况下,grep将返回 1 的状态代码,如果未选择任何行(即"没有结果"),所以,如果err.code === 1,则您知道没有匹配的文件。

  

注意:如@CharlesDuffy所述,应该首选通过Node.js File System API实现所需的文件操作。在exec 明确需要的情况下,可以将此答案作为替代方案。