De fogtam, és pont az a lényeg, hogy ettől nem lesz jobb. A "which" pontosan ugyanazt a parancsot adja vissza, mint amit a shell mindenféle hókusz-pókuszok nélkül megtalálna. Sőt rosszabb is annál, mintha csak simán beírnám a parancs nevét. Ugyanis amikor X parancsot futtatom (ahol a parancsszóban nincs pl "/"), akkor shelltől függő módon
- először megvizsgálja a shell aliasok listáját, és ha van ilyen nevű alias, akkor végrehajtódik a helyettesítés, és kezdi előlről a parancsfeldolgozást. (Nyilván olyan shellben - pl. original Bourne-shell - amiben nincs alias, ez kimarad)
- aztán a shell belső parancsok listáját
- aztán a shell-függvények listáját (nyilván ha a shellben ilyen nincs - csh, tcsh - akkor ez a lépés sem játszik)
- és csak a legvégén jön a PATH ellenőrzés.
Ha a "which" a shell beépített parancsa, akkor láthatja az első hármat, és visszaadhatja az erre vonatkozó információt (ilyen pl. a tcsh - FreeBSD-ben X éve csh néven is az érhető el), pl:
% which which
which: shell built-in command.
% which h
h: aliased to history 25
%
míg ha külső parancs, akkor az alias, belső parancs, shell-fv kategóriába tartozó dolgokat nem is látja, tehát csak a PATH-beli dolgokat találhatja meg. Viszont ha meg ezt akarja az ember elérni (azaz a PATH-beli, külső parancsot), akkor annak ennél a nyakatekert "X=$(which x)" módszernél van egyszerűbb megoldása: a parancs nevének bármelyik karakterét takard el a \ "" vagy '' kaarkterek valamelyikével, pl:
% \which which
/usr/bin/which
%
És igen, sokat lehet szívni azzal, hogy milyen "shell"ben mik a belsőleg megvalósított dolgok (kezdve a klasszikus test, [ , time , type parancsokkal), de bekavarhat pl. az, hogy Busybox a shell-ed, amibe aztán beleépítettek nem túl megszokott belső parancsokat is.
No szóval: semmi értelme nincs ennek a használati formának.