На деяких системах 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
.