Shell - Как найти каталог какой-то команды? - PullRequest
108 голосов
/ 20 мая 2010

Я знаю, что когда вы находитесь в оболочке, единственными командами, которые можно использовать, являются те, которые можно найти в некотором каталоге, установленном в PATH. Даже я не знаю, как узнать, какие каталоги находятся в моей переменной PATH (и это еще один хороший вопрос, на который можно было бы ответить), что я хотел бы знать:

Я захожу в раковину и пишу:

$ lshw

Я хочу знать команду оболочки, которая может сказать мне, где находится эта команда. Другими словами, где находится этот «исполняемый файл»?

Что-то вроде:

$ location lshw
/usr/bin

Кто-нибудь?

Ответы [ 6 ]

152 голосов
/ 20 мая 2010

Если вы используете Bash или zsh, используйте это:

type -a lshw

Показывает, является ли цель встроенной функцией, псевдонимом или внешним исполняемым файлом. Если последнее, оно будет показывать каждое место, которое появляется в вашем PATH.

bash$ type -a lshw
lshw is /usr/bin/lshw
bash$ type -a ls
ls is aliased to `ls --color=auto'
ls is /bin/ls
bash$ zsh
zsh% type -a which
which is a shell builtin
which is /usr/bin/which

В Bash для функций type -a также будет отображаться определение функции. Вы можете использовать declare -f functionname, чтобы сделать то же самое (вы должны использовать это для zsh, так как type -a не делает).

53 голосов
/ 20 мая 2010

Как это:

which lshw
17 голосов
/ 20 мая 2010

PATH - это переменная среды, которая может отображаться с помощью команды echo:

echo $PATH

Это список путей, разделенных двоеточием ':'

Команда which сообщает вам, какой файл выполняется при запуске команды:

which lshw

иногда вы получаете путь к символической ссылке; если вы хотите проследить эту ссылку до места, где находится настоящий исполняемый файл, вы можете использовать readlink и передать ему вывод which:

readlink -f $(which lshw)

Параметр -f указывает readlink продолжать рекурсивное следование символической ссылке.

Вот пример с моей машины:

$ which firefox
/usr/bin/firefox

$ readlink -f $(which firefox)
/usr/lib/firefox-3.6.3/firefox.sh
5 голосов
/ 20 мая 2010
~$ echo $PATH
/home/jack/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games
~$ whereis lshw
lshw: /usr/bin/lshw /usr/share/man/man1/lshw.1.gz
2 голосов
/ 04 апреля 2018

В оболочке TENEX C, tcsh , можно указать расположение (а) команды или, если это встроенная команда, с помощью команды where, например ::

tcsh% where python
/usr/local/bin/python
/usr/bin/python

tcsh% where cd
cd is a shell built-in
/usr/bin/cd
0 голосов
/ 20 мая 2010

Оболочка Korn, ksh, предлагает встроенную функцию whence, которая идентифицирует другие встроенные функции оболочки, макросы и т. Д. Однако команда which является более переносимой.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...