Как найти путь от места запуска текущего процесса / исполняемого файла? - PullRequest
5 голосов
/ 19 марта 2009

Я запускаю некоторые исполняемые файлы, когда подключен к локальному Unix-серверу.

Скажем, я пытаюсь запустить исполняемый файл 'abc'. Теперь сервер мог предоставить псевдоним для abc. Как мне узнать об этом пути? Например, если я вызову 'abc', он может фактически запустить его, скажем, из / opt / corp / xyz / abc .. Как узнать, по какому пути я вызываю исполняемый файл?

Кстати, я бегу на HP-UX: D

Ответы [ 6 ]

10 голосов
/ 19 марта 2009

"which abc", чтобы показать, на какой abc вы будете звонить

или "alias" для перечисления псевдонимов

возможно, "echo $ 0" из скрипта или извлечение argv [0] другим способом.

4 голосов
/ 19 марта 2009

Если вы используете переменную окружения PATH, вы можете попробовать:

$ which abc

или

$ whereis abc

Если для команды есть символическая ссылка, и вы хотите знать "реальную" цель, вы можете использовать что-то вроде:

$ readlink /opt/corp/xyz/abc

У меня сейчас нет доступа к системе HPUX, но это должно работать:

$ ls -l /opt/local/bin/wish
lrwxr-xr-x  1 root  admin  22 Feb  3 21:56 /opt/local/bin/wish@ -> /opt/local/bin/wish8.5
$ readlink /opt/local/bin/wish
/opt/local/bin/wish8.5

Если команда основана на псевдониме, следующее откроет определение псевдонима.

$ alias abc

в зависимости от того, как настроена ваша система, приведенные выше команды должны предоставить ответы на несколько вариантов вашего вопроса.

в Perl:

$running_script = $0;

из Python, см. SO Как получить имя файла модуля __main__ в Python?

2 голосов
/ 19 марта 2009

Спасибо всем! 'которая' была коммандой, за которой я следовал! Я теперь мажу себя лицом, поскольку я уже знал команду (в Ubuntu) .. И это работает как шарм в HP-UX!

РЕДАКТИРОВАТЬ: 'whereis', предложенный popcnt, является еще более подходящим Спасибо большое, человек!

2 голосов
/ 19 марта 2009

Имеется ли в HP-UX команда which? Run:

which abc

Если он у вас есть, команда which сообщит вам, какая программа abc будет запускаться из вашей $PATH.

1 голос
/ 19 марта 2009

Правильный способ получить путь к скрипту в Unix:

dir=$(cd $(dirname "$0"); pwd)

Справочная информация: $ 0 - это имя файла + путь скрипта относительно текущего каталога. Может быть абсолютным (/...) или относительным (../, dir/...). Таким образом, $(dirname "$0") возвращает путь (без имени файла). Следите за цитатами; «$ 0» может содержать пробелы и другие странные вещи.

Затем мы cd в этот каталог и pwd вернем абсолютный путь, по которому мы окажемся.

Работает для ksh и bash.

В C-программе вы должны проверить argv[0]. Я не уверен, что оболочка будет указывать полный путь там. Если у вас возникли проблемы, я предлагаю обернуть ваш исполняемый файл в небольшой скрипт, который подготавливает среду, а затем вызвать ваш исполняемый файл:

exec "$dir/"exe "$@"
1 голос
/ 19 марта 2009

Из терминала командной строки:

$ который abc

/ опт / АМФА / хуг / а

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