2009-03-19 7 views
5

Uruchamiam niektóre pliki wykonywalne, gdy są podłączone do lokalnego serwera serwera uniksowego.Jak znaleźć ścieżkę od miejsca, w którym działa bieżący proces/plik wykonywalny?

Powiedzmy, próbuję uruchomić plik wykonywalny "abc". Teraz serwer mógł podać alias dla "abc". Jak mogę poznać tę ścieżkę? Tak jak w przypadku, jeśli wywołuję "abc", może on faktycznie uruchomić go z, powiedzmy,/opt/corp/xyz/abc .. Skąd mam wiedzieć, z jakiej ścieżki wywołuję plik wykonywalny?

Nawiasem mówiąc biegnę na HP-UX: D

Odpowiedz

10

"which abc", aby pokazać, które abc można byłoby powołanie

lub "alias" do listy aliasów

może „Echo $ 0 "od wewnątrz skryptu lub pobieranie argv [0] w inny sposób.

2

Czy system HP-UX ma polecenie "który"? Run:

which abc 

Jeśli masz go komenda which powie, jaki program ABC będzie działał z $PATH.

4

Jeśli używasz użyciu zmiennej środowiskowej PATH, można spróbować:

$ which abc

lub

$ whereis abc

Jeśli jest to link symboliczny do komendy i chcesz wiedzieć " prawdziwy cel "", możesz użyć czegoś takiego:

 
$ readlink /opt/corp/xyz/abc 

Nie mam dostępu do systemu HP-UX przede mną teraz, ale to powinno działać:

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

Jeżeli polecenie jest oparty na alias dodaje ujawni definicji aliasu.

 
$ alias abc 

w zależności od konfiguracji systemu powyższe polecenia powinny dostarczyć odpowiedzi na wiele odmian pytania.

w Perlu:

$running_script = $0; 

od Pythona, zobaczyć tak How to get filename of the __main__ module in Python?

1

z terminala wiersza poleceń:

$ które abc

/opt/Corp/xyz/abc

2

Dzięki wszystkim! "Który" był dla mnie wezwaniem! Jestem teraz twarzą w twarz, tak jak już znałem polecenie (w Ubuntu). I działa jak urok w HP-UX!

EDYCJA: "whereis" sugerowane przez popcnt jest jeszcze bardziej odpowiednie! Niż człowiek!

+0

jeśli kopalni podoba, idź i +1, a jeśli zadowalający, można oznacz to jako odpowiedź na twoje pytanie. Zwykle widać to tutaj na SO, zamiast "odpowiedzi" z oryginalnego plakatu. – popcnt

1

Prawidłowy sposób uzyskać ścieżkę skryptu z systemu UNIX jest:

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

Tło: 0 $ to nazwa + ścieżka skryptu w stosunku do bieżącego katalogu. Może być bezwzględny (/...) lub względny (../, dir/...). Tak więc $(dirname "$0") zwraca ścieżkę (bez nazwy pliku). Uważaj na cytaty; "0" może zawierać spacje i inne dziwne rzeczy.

Następnie podamy cd do tego katalogu, a pwd zwróci bezwzględną ścieżkę, na której kończymy.

Działa dla ksh i bash.

W programie C należy sprawdzić: argv[0]. Nie jestem pewien, czy powłoka umieści tam pełną ścieżkę. Jeśli masz problemy, proponuję, by zakończyć swój plik wykonywalny w małym skrypt który przygotowuje środowisko, a następnie wywołać plik wykonywalny z:

exec "$dir/"exe "[email protected]"