什么C库有功能来做zsh的递归globs?

时间:2011-01-13 23:35:30

标签: javascript c glob

我写了一个nodejs绑定到glob.h(npm install glob来使用它)。

我真的很想支持zsh的花哨lib/**/*.js类型的东西,但我似乎无法弄清楚哪个库具有该功能。

我确实不想尝试自己实现它,而且我不是在寻找编程难题的任何聪明的解决方案。我只想要这样的事情:

#include <fancy_glob.h>
int do_fancy_glob (etc) { ... }

任何指针?我很确定Ruby对此有约束力,不是吗?


编辑:

我做了一些研究,发现了有趣的事情。

Guido Van Rossum(Python成名)编写了一个现在在BSD和其他一些unix上发现的实现。它没有包括所谓的“扩展”全局模式(**等)。当您在程序中执行#include <glob.h>时,很可能就是您将获得的。 man 3 glob描述了它的行为。

然而,就我所知,Bash,Zsh和Ksh现在都有扩展的glob实现,都是从头开始编写的。 NetBSD具有GVR实现的可识别后代,并添加了扩展的全局.Ruby在dir.c中实现了扩展的全局,作为其标准库的一部分(绝对用C编写,而不是ruby)。 Perl似乎已经绑定或实现了所有现存的glob库,我想这是可以预期的。

在我发现的所有内容中,NetBSD似乎与我使用典型的非扩展libc glob(3)编码最接近,并且其许可最适合我的项目。

另一种方法是从头开始重写它。我可以做到这一点,但我似乎无法找到任何明确的规范或测试套件。有什么建议吗?


编辑2:我在JS中重写了它。 https://github.com/isaacs/node-glob

1 个答案:

答案 0 :(得分:0)

我非常确定Ruby会自己做这件事,而且可能是Ruby代码。除了解析字符串和遍历文件系统之外,实现这一点并没有太多障碍。我不确定,但我不认为zsh也使用了这个库,它只是在zsh代码中。