J'ai un désordre enchevêtré d'installations python sur mon ordinateur portable. Je regardais les exécutables /usr/local/bin
et ils sont tous des liens symboliques vers../../../Library......
Il y a un comportement étrange autour de cela. Si je le vois, ls -lhaG
je vois --->
le chemin relatif à droite des liens symboliques:
lrwxr-xr-x 1 root wheel 69B Dec 7 22:29 python3 -> ../../../Library/Frameworks/Python.framework/Versions/3.1/bin/python3
Cependant, je ne peux pas sembler avoir aucun des outils en ligne de commande pour résoudre ce chemin et afficher le chemin réel vers python3. J'ai trouvé quelques détails ici et là concernant l'utilisation de pwd -P
et l' find
utilitaire pour le faire. Le problème est que cela ne semble pas fonctionner sous OS X de la façon dont les gens le décrivent comme fonctionnant sous Linux (c'est-à-dire qu'il affiche le chemin d'accès complet au lien symbolique). Ils viennent d’imprimer le chemin des liens symboliques pour moi:
FantasticMrFox:bin robert$ pwd -P python3
/usr/local/bin
FantasticMrFox:bin robert$ find `pwd -P` -name python3
/usr/local/bin/python3
Des idées sur ce qui se passe ici?
../..
.Cela résout de manière récursive et renvoie un chemin absolu:
Ou la version non interactive:
la source
$ python -c "import os; print os.path.realpath('bin')"
>>/Users/jason/Applications
. Je symlink ~ ~ bin vers ~ / Applications afin d’avoir un .bash_profile / $ PATH unifié sur les systèmes Mac et * nix.pwd
et dontfind
j'ai parlé dans la question résolvent le chemin d'accès complet sur des systèmes autres que OS X. Je ne les ai cependant pas testées.Peut-être que cette discussion sur le dépassement de pile est utile: Comment résoudre les liens symboliques dans un script shell? Considérez cette réponse en particulier .
la source
GNU coreutils-8.15 a ajouté en 2012 un nouvel outil de ligne de commande
realpath
qui fait ce que vous voulez: il résout les chaînes de liens symboliques et affiche le résultat sous forme de chemin absolu (par défaut) ou relatif.Apple ne comprend pas encore
realpath
dans macOS (ils semblent malheureusement à éviter tous les outils GPLv3), mais vous pouvez facilement installer vous - même, par exemple en utilisant Homebrew:brew install coreutils
.la source
Vous pouvez utiliser
readlink -f
. Il revient à travers tous les liens. Supposons que le lien est vers un chemin qui est en outre un lien. Vous voudriez avoir le chemin absolu final.la source
read link -f python3
par exemple, et elle mettra en mémoire tampon le lien symbolique complet pour vous.-f
jamais existé sur la version OS X de readlink.