2015-05-18 2 views
1

Есть ли способ или команда, чтобы узнать путь, из которого выполняется стандартная команда? Пример ls, mkdir, mysql, hadoop и т.д ..Как узнать, где выполняется команда unix?

Я знаю, что их происхождение можно узнать из $PATH переменных, так и должно быть, вероятно, в одном из /bin каталогов. Но как я могу правильно получить каталог из того, откуда выполняется команда?

+0

Проверьте это: http://stackoverflow.com/questions/2869100/shell-how-to-find-directory-of-some-command, вы найдете интересные ответы – Cristik

ответ

1

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

[email protected] ~ $ which mkdir 
/usr/bin/mkdir 

и если вы действительно нуждаетесь в каталоге, вы всегда можете обратиться dirname к нему:

[email protected] ~ $ dirname `which mkdir` 
/usr/bin 
+0

Почему downvote? – Mureinik

+0

Спасибо Mureinik за быстрый ответ .. :) – anna

+0

Извините, я попытался проголосовать, но это дало мне -1, и я не могу откат, он говорит, что мне нужна 15 репутации. Я нашел ваш ответ полезным, поэтому попросил команду stackoverflow удалить -1 и изменить ее на +1 – anna

0

Чтение параметров порядка вопрос, я заметил острое исключение методов, основанных на 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.

Смежные вопросы