Відповіді:
Тільки вбудована оболонка повідомить правильно, що буде робити оболонка для даного імені команди, оскільки тільки вбудовані модулі можуть повністю знати про псевдоніми, функції оболонки, інші вбудовані модулі та ін. Пам'ятайте: не всі команди в першу чергу відповідають виконуваним файлам.
Для оболонки Bourne Again, bash
, вбудований type
команда:
$ type '['
[ is a shell builtin
Для оболонки риби, fish
, type
вбудований працює аналогічно bash. Щоб отримати лише шлях до виконуваного файлу, використовуйте command -v
:
$ type cat
cat is /bin/cat
$ command -v cat
/bin/cat
Для оболонки Korn, ksh
, вбудований whence
Команда - с type
спочатку налаштований як звичайний псевдонім для whence -v
і command
вбудований з -v
варіант еквівалентний whence
:
$ whence -v ls
ls is a tracked alias for /bin/ls
Для Z Shell, zsh
, вбудований whence
з командою command
вбудований з -v
варіант еквівалентний whence
і вбудовані модулі type
, which
, і where
дорівнює whence
з опціями -v
, -c
, і -ca
відповідно.
$ whence ls
/bin/ls
Для T C Shell, tcsh
, вбудований which
command - не можна плутати з будь-якою зовнішньою командою за такою назвою:
> which ls
ls: aliased to ls-F
> which \ls
/bin/ls
type
також вбудовано до zsh?
which-2.19-6.el6.x86_64
) ставить файл запуску /etc/profile.d/which2.sh
. Це зчитуються не csh оболонками, включаючи zsh. Це псевдоніми which
до себе. Тому для користувачів zsh, зокрема, він перекриває розрив вбудованого which
.
Можна використовувати which
для цього:
aix@aix:~$ which ls
/bin/ls
Він працює за допомогою пошуку PATH
для виконуваних файлів, що відповідають іменам аргументів. Зверніть увагу, що це не працює з псевдонімами оболонки:
aix@aix:~$ alias listdir=/bin/ls
aix@aix:~$ listdir /
bin dev initrd.img lib32 media proc selinux tmp vmlinuz
...
aix@aix:~$ which listdir
aix@aix:~$
type
, однак, працює:
aix@aix:~$ type listdir
listdir is aliased to `/bin/ls'
which
не обов'язково достатньо самостійно. Вона лише повертає спочатку знайдено ім'я в $ PATH ... Що ім'я може бути символічним посиланням, і ні фактичне кінець ланцюга виконуваний файл.
which
робить ні (обов'язково) повернути виконуваний файл. Вона повертає перший відповідний файл ім'я він знаходить у $ PATH (або декількох подібних іменованих файлів при використанні which -a
) ... The фактичний виконуваний файл може бути декількома посиланнями.
which locate
/usr/bin/locate
file $(which locate)
/usr/bin/locate: symbolic link to /etc/alternatives/locate'
Команда, яка знаходить фактичний виконуваний файл readlink -e
,
(в поєднанні з which
)
readlink -e $(which locate)
/usr/bin/mlocate
Щоб побачити всі проміжні посилання :
f="$(which locate)" # find name in $PATH
printf "# %s\n" "$f"
while f="$(readlink "$f")" ;do # follow links to executable
printf "# %s\n" "$f"
done
# /usr/bin/locate
# /etc/alternatives/locate
# /usr/bin/mlocate
Ви можете спробувати:
whereis ls
Це дає мені:
ls: /bin/ls /usr/share/man/man1/ls.1.gz