На деяких системах which -aпоказує всі збіги. Якщо ваша оболонка bash або zsh¹, ви можете використовувати typeзамість цього: type fooпоказує першу відповідність і type -a fooпоказує всі збіги. Три команди type, whichі whenceробити в основному те ж саме; вони відрізняються між оболонками та операційними системами за доступністю, опціями та тим, що саме вони повідомляють. typeзавжди доступний і показує всі можливі імена, подібні до команд (псевдоніми, ключові слова, вбудовані оболонки, функції та зовнішні команди).
Єдиний повністю портативний спосіб відображення всіх матчів - це розібратися $PATH. Ось сценарій оболонки, який робить це. Якщо ви зробите це функцією оболонки, обов'язково укладіть тіло функції в дужки (щоб змінити IFSта set -fне уникнути функції) та змінити exitна return.
#!/bin/sh
set -f # disable globbing
IFS=: # break words at : only
not_found=1
for d in $PATH; do
if [ -f "$d/$x" ] && [ -x "$d/$x" ]; then
printf '%s\n' "$d/$x"
not_found=0
fi
done
exit $not_found
¹
Або ksh 93, згідно з документацією, хоча ksh 93s + 2008-01-31 друкує першу відповідність лише при спробі.
which --all.