Например, если в качестве входных данных передано ls оно должно сказать мне, что /bin/ls запустится, если в командной строке запустить ls .
4 ответа
Используемая команда варьируется от оболочки к оболочке.
Только встроенная оболочка скажет правильно, что будет делать оболочка для данного имени команды, поскольку только встроенные модули могут полностью знать об алиасах, функциях оболочки, других встроенных модулях и т.д. Помните: во-первых, не все команды соответствуют исполняемым файлам.
Для оболочки 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,
zsh, встроенной является командаwhence, сcommandвстроенной с опцией-vэквивалентнойwhenceи встроеннымtype,whichиwhereэквивалентноwhenceс опциями-v,-cи-caсоответственно.$ whence ls /bin/lsДля TC Shell,
tcsh, встроенной является командаwhichне следует путать ни с какой внешней командой с таким именем:> which ls ls: aliased to ls-F > which \ls /bin/ls
дальнейшее чтение
Вы можете использовать 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 -a) ... Фактический исполняемый файл может содержать несколько ссылок.
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
