Чтение параметров порядка вопрос, я заметил острое исключение методов, основанных на PATH
, и проигнорировал очевидный ответ для which
(потому что это именно то, что он делает). Программа which
, кстати, первоначально была сценарием С-оболочки, хотя существуют и другие реализации (например, FreeBSD и bash). Solaris, например, имеет версию мало изменились по сравнению с 4.2BSD и его страничным руководством заявляет
Оба псевдонимов и путь берутся из файла .cshrc пользователя.
Если вы не используете C-shell, то оригинальная версия which
имеет ограниченную полезность. Поскольку стандартная версия отсутствует, результаты (и возможности инструмента) могут варьироваться от системы к системе. Некоторые оболочки (такие как ksh
) имеют сходные функции, но по-разному обозначены, например, whence
в случае ksh
(bash предоставляет псевдоним ksh type
, но не ключевое слово `whence).
Я не использую which
много, имеющий лучшие инструменты (conflict и path). Но, проигнорировав очевидное, вопрос как сформулированный может с легкостью представлять интересный вопрос: как приложение может определить каталог, из которого было запущено другое приложение. Не очевидно «где исполняемый файл?», но «Каков был рабочий каталог при запуске программы?». В последнее время был аналогичный вопрос об относительных путях.
В некоторых системах, поддерживающих псевдо-файловую систему /proc
, имеется узел cwd
, который дает текущий рабочий каталог данного процесса. Вопрос Find out current working directory of a running process? подробно останавливается на этом вопросе. дополнительная функция
XTERM в «порождение-нового терминала» (добавлено в patch #225 в 2007 году) использует эту информацию, чтобы сделать новый терминальный экземпляр работать в одной и той же рабочей директории, текущего оболочки рабочего каталога пользователя.
Сценарий может использовать это, начиная с идентификатора процесса для рассматриваемой команды и проверяя дерево для соответствующего узла cwd
.
Проверьте это: http://stackoverflow.com/questions/2869100/shell-how-to-find-directory-of-some-command, вы найдете интересные ответы – Cristik