2009-03-19 13 views
5

Sto eseguendo alcuni eseguibili mentre sono connesso a un box del server unix locale.Come trovare il percorso da cui è in esecuzione il processo/eseguibile corrente?

Dire, sto cercando di eseguire un eseguibile 'abc'. Ora il server potrebbe aver fornito un alias per 'abc' .. Come posso conoscere questo percorso? Come in, se invoco 'abc', potrebbe effettivamente eseguirlo da, diciamo,/opt/corp/xyz/abc .. Come faccio a sapere da quale percorso sto invocando l'eseguibile?

Tra l'altro sto correndo su HP-UX: D

risposta

10

"which abc" per mostrare che abc si sarebbe chiamando

o "alias" per elencare gli alias

forse "eco $ 0 "da dentro uno script, o recuperando argv [0] in qualche altro modo.

2

HP-UX ha il comando "which"? Run:

which abc 

Se lo avete, il comando which vi dirà quale programma di ABC si svolgerà dal tuo $PATH.

4

Se si esegue utilizzando la variabile d'ambiente PATH, si potrebbe provare:

$ which abc

o

$ whereis abc

Se c'è un collegamento simbolico per il comando e si desidera conoscere il " reale " target, è possibile utilizzare qualcosa del tipo:

 
$ readlink /opt/corp/xyz/abc 

Non ho accesso a un sistema HPUX di fronte a me in questo momento, ma questo dovrebbe funzionare:

$ 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 

Se il comando si basa su un alias, il seguente rivelerà la definizione di alias.

 
$ alias abc 

a seconda di come il sistema è configurato, i comandi di cui sopra dovrebbero fornire risposte alle molteplici varianti di tua domanda.

in Perl:

$running_script = $0; 

da Python, vedere così How to get filename of the __main__ module in Python?

1

Da un terminale a riga di comando:

$ che abc

/opt/corp/xyz/abc

2

Grazie a tutti! "quale" era il comando che cercavo! Mi sto facendo facepalming ora come avevo già conosciuto il comando (in Ubuntu) .. E funziona come un fascino in HP-UX!

MODIFICA: "whereis" suggerito da popcnt è ancora più appropriato! Grazie mille amico!

+0

se ti piace la mia, andare avanti e uno, e se soddisfacente, si potrebbe segnalo come la risposta alla tua domanda. Questo è in genere ciò che vedrai qui su SO, invece di una "risposta" dal poster originale. – popcnt

1

Il modo corretto per ottenere il percorso di uno script su Unix è:

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

Background: $ 0 è il nome del file + percorso dello script relativo alla directory corrente. Può essere assoluto (/...) o relativo (../, dir/...). Quindi lo $(dirname "$0") restituisce il percorso (senza il nome del file). Badate alle virgolette; "$ 0" può contenere spazi e altre cose strane.

Abbiamo quindi cd in quella directory e pwd restituirà il percorso assoluto in cui finiamo.

Works per ksh e bash.

In un programma C, è necessario verificare argv[0]. Non sono sicuro se la shell inserirà il percorso completo. In caso di problemi, vi suggerisco per avvolgere il vostro eseguibile in un piccolo script che prepara l'ambiente e quindi richiamare l'eseguibile con:

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