Ответы:
Только встроенная оболочка скажет правильно, что будет делать оболочка для данного имени команды, поскольку только встроенные модули могут полностью знать об алиасах, функциях оболочки, других встроенных модулях и т. Д. Помните: во-первых, не все команды соответствуют исполняемым файлам.
Для Bourne Again оболочки bash, встроенный является typeкоманда:
$ type '['
[ is a shell builtin
Для рыбы оболочкиfish , The typeвстроенный работает аналогично Баш. Чтобы получить только путь к исполняемому файлу, используйте command -v:
$ type cat
cat is /bin/cat
$ command -v cat
/bin/cat
Для Korn Shell, 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
Для ТС Shell, tcsh, встроенные является whichкоманда - не следует путать с любой внешней командой с таким именем:
> 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) ... Фактический исполняемый файл может содержать несколько ссылок.
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