«Whereis» et «which» renvoient des chemins différents sous Mac OS X

27

J'ai le OpenSSL 9.8 par défaut (Mac OS X 10.6.8) et j'ai décidé d'installer la dernière version (1.0.1) via MacPorts ( sudo port install openssl).

Ce sont des sorties de console dont et où sont les commandes:

$ whereis openssl
/usr/bin/openssl

(c'est celui du système par défaut)

$which openssl
/opt/local/bin/openssl

(ceci est installé via MacPorts)

$ openssl version
OpenSSL 1.0.1c 10 May 2012

(il y a la version du port mac dans PATH)

Pourquoi les différents chemins sont-ils retournés pour whereiset which, et est-ce correct? Existe-t-il un moyen d'obtenir des résultats égaux?

jctim
la source

Réponses:

31

Dans la page de manuel de whereis, il est clairement indiqué (c'est moi qui souligne):

L'utilitaire whereis vérifie les répertoires binaires standard pour les programmes spécifiés, en imprimant les chemins de tous ceux qu'il trouve.

Le chemin recherché est la chaîne retournée par l'utilitaire sysctl (8) pour la chaîne `` user.cs_path ''

Contrairement à cela, whichest l'outil couramment utilisé pour vérifier où se trouve un binaire pour le chemin de votre utilisateur.

L'utilitaire which prend une liste de noms de commandes et recherche le chemin de chaque fichier exécutable qui serait exécuté si ces commandes avaient été effectivement appelées .

Cela explique votre différence, puisque /opt/local/binn'est pas un système à l' échelle chemin après « standard » tous, MacPorts est une option complètement l' installation et sysctlne dispose que /usr/bin:/bin:/usr/sbin:/sbindans son user.cs_pathdéfaut par.

En général, restez sur whichou which -apour trouver un binaire plutôt que d'utiliser whereis.


Vous pouvez théoriquement changer user.cs_pathpar

sysctl -w user.cs_path=/opt/local/bin:/usr/bin:/bin:/usr/sbin:/sbin

mais je ne sais pas si c'est une si bonne idée.

slhck
la source
Merci, vous avez souligné que "L'utilitaire whereis vérifie les répertoires binaires standard " - c'est la réponse! n'a pas pu voter pour vous répondre à cause d'une petite réputation ((
jctim
Ne vous inquiétez pas, vous aurez sûrement plus de réputation bientôt. Bienvenue sur Super User! :)
slhck
Avoir le même problème avec psql sur OS X - malheureusement, user.cs_path n'est pas accessible en écriture. Mais je me rapproche de ma solution, merci pour une réponse si utile!
user208769