2009-03-19 4 views
5

J'exécute des exécutables lorsque je suis connecté à un serveur local Unix.Comment trouver le chemin depuis lequel le processus/exécutable actuel est en cours d'exécution?

Dites, j'essaye d'exécuter un exécutable 'abc'. Maintenant, le serveur a peut-être fourni un alias pour 'abc'. Comment puis-je connaître ce chemin? Comme dans, si j'appelle 'abc', il pourrait bien l'exécuter, disons,/opt/corp/xyz/abc. Comment puis-je savoir à partir de quel chemin j'appelle l'exécutable?

Par la façon dont je fonctionne sur HP-UX: D

Répondre

10

"which abc" pour montrer que abc vous appellerez

ou "alias" à la liste des alias

peut-être « écho $ 0 "depuis l'intérieur d'un script, ou récupérer argv [0] d'une autre manière.

2

HP-UX dispose-t-il de la commande "which"? Run:

which abc 

Si vous l'avez, la commande which vous dira quel programme abc se déroulera à partir de votre $PATH.

4

Si vous exécutez en utilisant la variable d'environnement PATH, vous pouvez essayer:

$ which abc

ou

$ whereis abc

S'il y a un lien symbolique pour la commande et que vous voulez connaître le " réel " cible, vous pouvez utiliser quelque chose comme:

 
$ readlink /opt/corp/xyz/abc 

Je n'ai pas accès à un système HPUX devant moi en ce moment, mais cela devrait fonctionner:

$ 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 

Si la commande est basée sur un alias, ce qui suit révèle la définition d'alias. En fonction de la configuration de votre système, les commandes ci-dessus doivent répondre à plusieurs variantes de votre question en fonction de la configuration de votre système.

en Perl:

$running_script = $0; 

de python, voir SO How to get filename of the __main__ module in Python?

1

d'un terminal de ligne de commande:

$ qui abc

/opt/corp/xyz/abc

2

Merci à tous! 'qui' était le commmand j'étais après! Je fais facepalming moi-même maintenant que j'avais déjà connu la commande (dans Ubuntu) .. Et cela fonctionne comme un charme dans HP-UX!

EDIT: 'whereis' suggéré par popcnt est encore plus approprié! Merci beaucoup!

+0

si vous aimez moi, allez-y et +1, et si satisfaisant, vous pouvez marquez-le comme la réponse à votre question. C'est typiquement ce que vous verrez ici sur SO, au lieu d'une "réponse" de l'affiche originale. – popcnt

1

La bonne façon d'obtenir le chemin d'un script sur Unix est:

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

Contexte: $ 0 est le nom + chemin du script par rapport au répertoire courant. Il peut être absolu (/...) ou relatif (../, dir/...). Ainsi, le $(dirname "$0") renvoie le chemin (sans le nom de fichier). Attention aux citations "$ 0" peut contenir des espaces et d'autres choses étranges.

Nous avons ensuite cd dans ce répertoire et pwd retournera le chemin absolu où nous nous retrouvons.

Fonctionne pour ksh et bash. Dans un programme C, vous devez vérifier argv[0]. Je ne suis pas sûr que le shell va mettre le chemin complet là-dedans. Si vous avez des problèmes, je suggère d'envelopper votre exécutable dans un petit script qui prépare l'environnement puis appelez votre exécutable avec:

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