Ich habe ein Durcheinander von Python-Installationen auf meinem Laptop. Ich habe mir die ausführbaren Dateien in angeschaut /usr/local/bin
und sie sind alle symbolische Links zu../../../Library......
Es gibt ein seltsames Verhalten, das das umgibt. Wenn ich das tue, ls -lhaG
sehe ich --->
und den relativen Pfad rechts von den Symlinks:
lrwxr-xr-x 1 root wheel 69B Dec 7 22:29 python3 -> ../../../Library/Frameworks/Python.framework/Versions/3.1/bin/python3
Es scheint jedoch nicht möglich zu sein, eines der Befehlszeilentools zum Auflösen dieses Pfads und Anzeigen des tatsächlichen Pfads zu python3 zu verwenden. Ich habe hier und da ein paar Kleinigkeiten in Bezug auf die Verwendung pwd -P
und das find
Dienstprogramm gefunden, um dies zu tun. Das Problem ist, dass diese offenbar unter OS X nicht so funktionieren, wie sie unter Linux beschrieben werden (dh den vollständigen Pfad zur symbolischen Verknüpfung ausgeben). Sie drucken nur den Pfad für symbolische Links für mich:
FantasticMrFox:bin robert$ pwd -P python3
/usr/local/bin
FantasticMrFox:bin robert$ find `pwd -P` -name python3
/usr/local/bin/python3
Irgendwelche Ideen, was hier los ist?
../..
.Dies wird rekursiv aufgelöst und gibt einen absoluten Pfad zurück:
Oder die nicht interaktive Version:
quelle
$ python -c "import os; print os.path.realpath('bin')"
>>/Users/jason/Applications
. Ich verknüpfe ~ / bin mit ~ / Applications, um ein einheitliches .bash_profile / $ PATH auf Mac- und * nix-Systemen zu erhalten.pwd
und,find
über die ich in der Frage gesprochen habe, den vollständigen Pfad auf anderen Systemen als OS X auflösen. Ich habe sie jedoch nicht getestet.Vielleicht ist diese Diskussion über Stack Overflow hilfreich: So lösen Sie symbolische Links in einem Shell-Skript auf Beachten Sie insbesondere diese Antwort .
quelle
GNU coreutils-8.15 hat 2012 ein neues Befehlszeilen-Tool hinzugefügt, das genau
realpath
das tut, was Sie wollen: Es löst Ketten symbolischer Verknüpfungen auf und gibt das Ergebnis entweder als absoluten (Standard) oder relativen Pfad aus.Apple ist noch nicht
realpath
in macOS enthalten (sie scheinen leider alle GPLv3-Tools zu meiden), aber Sie können es einfach selbst installieren, zbrew install coreutils
. B. mit Homebrew:.quelle
Sie können verwenden
readlink -f
. Es wiederholt sich durch alle Links. Angenommen, die Verknüpfung ist ein Pfad, der eine Verknüpfung darstellt. Sie möchten den endgültigen absoluten Pfad haben.quelle
read link -f python3
und puffert den vollständigen symbolischen Link für Sie.-f
es in der OS X-Version von readlink noch nie existiert hat.