7 votes

Comment dresser la liste des versions installées d'un même programme

J'ai un programme appelé PyMOL installé plusieurs fois sur ma machine. L'un a été installé par MacPorts, l'autre par le canal de distribution des développeurs, etc. L'un est dans /opt/local/bin, l'autre dans /i/have/no/clue.

Je sais que je peux utiliser "which pymol" pour voir où se trouve celui qui est exécuté, mais comment puis-je obtenir l'emplacement des autres qui portent le même nom ?

3voto

adam Points 11

Vous avez la bonne commande et il vous suffit de définir l'option appropriée :

which -a pymol affichera toutes les instances de l'exécutable pymol situé à l'intérieur de votre PATH .

Par exemple, sur mon ordinateur portable, j'ai git installé à deux endroits :

$ which git
/usr/local/bin/git

fournit ce qui sera exécuté lorsque j'utiliserai la commande git .

$ which -a git
/usr/local/bin/git
/usr/bin/git

fournit chaque instance de l'exécutable dans mon PATH .

2voto

Kent Points 6002

whereis pymol devrait vous montrer toutes les correspondances qui se trouvent dans votre chemin d'accès à l'exécutable.

1voto

Kaydell Points 289

Vous pouvez utiliser "find" ou "locate", puis passer les résultats par "grep".

Cela vous donnera plus que les résultats de "which" ou "whereis" qui n'afficheront que les choses sur $PATH.

La fonction "localiser" est plus rapide, mais elle utilise un index qui n'est pas toujours à jour.

La fonction "find" est plus lente, car elle effectue une recherche récursive de tous les éléments, mais elle produit tous les résultats, et pas seulement ceux qui ont été indexés, comme le fait la fonction "locate".

0voto

nohillside Points 82672

Du moins, d'après sa page de manuel, whereis ne cherche pas dans $PATH mais dans le résultat de sysctl user.cs_path (qui ne contient aucun répertoire supplémentaire ajouté par le profil de l'utilisateur). Pour rechercher la commande sur la base de l'adresse $PATH vous pouvez utiliser une fonction shell comme

function whereis() {
    for p in ${PATH//:/ }; do
        [[ -x "$p/$1" ]] && echo "$p"
    done
}

ou (pour votre cas particulier) exécuter

for p in ${PATH//:/ }; do [[ -x "$p"/pymol ]] && echo "$p" ; done

PS : Le caractère espace à la fin de ${PATH...} est essentiel pour que cela fonctionne.

LesApples.com

LesApples est une communauté de Apple où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres utilisateurs d'appareils Apple, poser vos propres questions ou résoudre celles des autres.

Powered by:

X