我想在节点中使用child_process
搜索文件的存在:
const { exec } = require('child_process');
exec('ls | grep "filename"', (err, result) => {...})
当文件名存在时,exec结果很好。但是当文件名不存在时,我收到一个错误:
命令失败:ls | grep“filename”
在这种情况下,如何判断执行命令是错误,还是仅仅因为没有找到结果?
修改
感谢有关不以这种方式搜索文件的建议。上面的代码不是实际的代码,只是一个演示文章,用于说明grep
的问题。在我的实际案例中,我在task spooler的输出中搜索关键字,因此我使用了exec
和tsp -l | grep ...
答案 0 :(得分:2)
您可以通过查看回调中err.code
的值来确定这一点。它在Node.js docs中有更详细的记录。
由于管道中的最后一个命令是grep
,请查阅grep
联机帮助页以获取完整的状态代码列表,以便适当地分支逻辑。在您的情况下,grep
将返回 1 的状态代码,如果未选择任何行(即"没有结果"),所以,如果err.code === 1
,则您知道没有匹配的文件。
注意:如@CharlesDuffy所述,应该首选通过
Node.js
File System API实现所需的文件操作。在exec
明确需要的情况下,可以将此答案作为替代方案。