which (which)

Перейти к навигации Перейти к поиску

which — Unix-утилита, отображающая полный путь к указанным командам или сценариям.

Which принимает один или более аргументов имя_программы. Для каждого из них она выводит тот полный путь к исполняемому файлу, который будет использован командной оболочкой, если имя_программы ввести в качестве команды в командной строке. Эта программа выполняет поиск исполняемых файлов или сценариев в каталогах, перечисленных в переменной окружения PATH используя тот же алгоритм, что и bash.

--all, -a
Выводит все совпавшие исполняемые файлы по содержимому в переменной окружения PATH, а не только первый из них.
--read-alias, -i
Считывает псевдонимы, поступающие из стандартного ввода и направляет на стандартный вывод информацию по совпавшим. Эта опция полезна в сочетании с использованием псевдонима для самой команды which. Например:
alias which='alias | which -i'.
--skip-alias
Игнорирует опцию «--read-alias», если таковая имеется. Эта опция полезна для точного поиска обычных двоичных файлов, которые используют опцию «--read-alias» в псевдониме или функции для which.
--read-functions
Считывает функции, определённые в командной оболочке и поступающие из стандартного ввода, а затем направляет на стандартный вывод информацию по совпавшим. Эта опция полезна в сочетании с функциями командной оболочки для самой команды which. Например:
which() { declare -f | which --read-functions $@ }
export -f which
--skip-functions
Игнорирует опцию «--read-functions», если таковая имеется. Эта опция полезна для точного поиска обычных двоичных файлов, которые используют опцию «--read-alias» в псевдониме или функции для which.
--skip-dot
Пропускает все каталоги из переменной окружения PATH, которые начинаются с точки.
--skip-tilde
Пропускает все каталоги из переменной окружения PATH, имена которых начинаются с символа тильда (~), а также все исполняемые файлы, которые расположены в каталоге, указанном в переменной HOME.
--show-dot
Если имя каталога из переменной окружения PATH начинается с точки и соответствующий исполняемый файл имя_программы был найден в этом пути, тогда вместо полного пути будет выведено «./имя_программы».
--show-tilde
Выводит тильду, когда каталог совпадает с каталогом, указанном в переменной окружения HOME (то есть с домашним каталогом). Эта опция игнорируется, если which вызывается суперпользователем (root).
--tty-only
Не обрабатывает опции, которые находятся справа за этой опцией, если они поступают не с терминала (tty).
--version,-v,-V
Выводит информацию о версии программы на стандартное устройство и завершает её работу.
--help
Выводит краткое описание опций программы на стандартное устройство и завершает её работу.

Пример использования

[править | править код]

Обычно утилиту which используют в различных псевдонимах (C shell) или сценариях (Bourne shell) командных оболочек, например, как показано ниже:

Командная оболочка bash:

which ()
{
  (alias; declare -f) | /usr/bin/which --tty-only --read-alias --read-functions --show-tilde --show-dot $@
}
export -f which

Командная оболочка tcsh:

alias which 'alias | /usr/bin/which --tty-only --read-alias --show-dot --show-tilde'

В следующем примере показано два возможных варианта вывода одной и той же команды which, в зависимости от контекста её применения. В первом случае, вместо полного пути выводится ~/ и ./ (для исполняемого файла, расположенного в домашнем каталоге пользователя), когда команда which непосредственно запущена пользователем из командной строки. Во втором — команда which запущена из скрипта. Здесь будет выведен полный путь к указанной программе:

which q2
> ~/bin/q2
echo `which q2`
> /home/carlo/bin/q2