Відповіді:
Тільки вбудована оболонка повідомить правильно, що буде робити оболонка для даного імені команди, оскільки тільки вбудовані модулі можуть повністю знати про псевдоніми, функції оболонки, інші вбудовані модулі та ін. Пам'ятайте: не всі команди в першу чергу відповідають виконуваним файлам.
Для оболонки 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/locatefile $(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