Я написал привязку nodejs к glob.h (npm install glob
для ее использования).
Мне бы очень хотелось поддерживать причудливый тип lib/**/*.js
zsh, но я не могу понять, какая библиотека имеет эту функциональность.
Я точно не хочу пытаться реализовать это самостоятельно, и я не ищу умного решения головоломки программирования. Я просто хочу что-то вроде этого:
#include <fancy_glob.h>
int do_fancy_glob (etc) { ... }
Любые указатели? Я почти уверен, что у Ruby есть привязка к этому, не так ли?
РЕДАКТИРОВАТЬ:
Я провел небольшое исследование и выяснил интересные вещи.
Гвидо Ван Россум (известный по Python) написал реализацию, которая сейчас используется в BSD и некоторых других Unix-системах. Он не включал так называемые «расширенные» шаблоны глобусов (**
и т. д.). Когда вы делаете #include <glob.h>
в своей программе, скорее всего, это то, что вы получите. man 3 glob
описывает его поведение.
Однако Bash, Zsh и Ksh теперь имеют расширенные реализации glob, и все они, насколько я могу судить, написаны с нуля. У NetBSD есть узнаваемый потомок реализации GVR с добавленными расширенными глобусами. Ruby имеет расширенные глобусы, реализованные в dir.c
как часть своей стандартной библиотеки (определенно написанной на C, а не на ruby). Perl, похоже, имеет привязки или реализации всех существующих библиотек глобусов, чего, я полагаю, и следовало ожидать.
Из всех, что я нашел, NetBSD кажется наиболее близкой к тому, что я кодировал с типичной нерасширенной libc glob(3)
, и ее лицензия больше всего подходит для моего проекта.
Другим подходом было бы переписать его с нуля. Я был бы в порядке, но я не могу найти четкую спецификацию или набор тестов. Есть предложения?
РЕДАКТИРОВАТЬ 2: я переписал его на JS. https://github.com/isaacs/node-glob