Niekedy sa ocitnem v situácii, keď si potrebujem pozrieť spustiteľné súbory dostupné v aktuálnom projektovom adresári, vybrať vhodný a spustiť ho, prípadne s nejakými parametrami. Bohužiaľ, správcovia balíčkov sa nedohodli na jednotnej ceste, kde by spustiteľné súbory mali sídliť. Dva príklady, ktoré ma bežne trápia, sú:
- PHP
composerich ukladá do adresáravendor/bin/ - Node
npmich ukladá do adresáranode_modules/.bin
Iné jazyky ako Go alebo Rust majú vlastných správcov balíčkov, ktoré môžu používať iné cesty. Aby toho nebolo málo, správca balíčkov node používa skrytý adresár (začínajúci bodkou). A okrem toho oba adresáre neobsahujú priamo spustiteľné súbory, ale symbolické odkazy na ne. Používanie symbolických odkazov je úplne správne, len to veci trochu komplikuje.
Treba povedať, že v prípade npm je argument pre skrytie
node_modules/.bin/ opodstatnený – kedy si naposledy ručne zadával celú
cestu k binárke node balíčka? Na to máme npx. Ale npx dokáže spúšťať aj
binárky z balíčkov, ktoré nie sú nainštalované v lokálnom projekte, a tieto
by som chcel vidieť.
Zsh alias #
Takto som problém rýchlo vyriešil pomocou aliasu:
fx() { print -z $(fd -HI -tl | fzf) }
Pozri ho v akcii nižšie, otestovaný pre npm aj composer ako je uvedené
vyššie:

Alias vyžaduje fd, fzf a zsh. Je tiež možné ho trochu upraviť, aby
vypisoval všetky spustiteľné súbory pomocou dodatočného parametra -tx:
fx() { print -z $(fd -HI -tl -tx | fzf) }
Ja však preferujem výpis len symbolických odkazov pomocou -tl, pretože z
dôvodu, ktorý mi momentálne uniká, balíčky od spomínaných správcov balíčkov
majú tendenciu obsahovať súbory s nastaveným príznakom spustiteľnosti na
všelijakých súboroch, dokonca aj na README.md. Preto je výstup so
skutočnými spustiteľnými príznakmi veľmi chaotický a má len malú praktickú
hodnotu. Výpis len symbolických odkazov – hoci to môže znieť prekvapivo –
funguje pri hľadaní spustiteľných súborov oveľa lepšie. Enjoy!