Mam zaplątany bałagan instalacji Pythona na moim laptopie. Patrzyłem na pliki wykonywalne /usr/local/bin
i wszystkie są symbolicznymi linkami do../../../Library......
Jest w tym trochę dziwnych zachowań. Jeśli ls -lhaG
widzę, --->
i względną ścieżkę po prawej stronie dowiązań symbolicznych:
lrwxr-xr-x 1 root wheel 69B Dec 7 22:29 python3 -> ../../../Library/Frameworks/Python.framework/Versions/3.1/bin/python3
Jednak nie mogę uzyskać żadnego z narzędzi wiersza polecenia, aby rozwiązać tę ścieżkę i wyświetlić rzeczywistą ścieżkę do python3. Tu i ówdzie znalazłem kilka ciekawostek dotyczących wykorzystania pwd -P
i find
narzędzia do tego celu. Problem polega na tym, że wydaje się, że nie działają one w systemie OS X w sposób, w jaki ludzie je opisują, pracując na systemie Linux (tj. Wyświetlając pełną ścieżkę do dowiązania symbolicznego). Po prostu drukują mi ścieżkę dowiązań symbolicznych:
FantasticMrFox:bin robert$ pwd -P python3
/usr/local/bin
FantasticMrFox:bin robert$ find `pwd -P` -name python3
/usr/local/bin/python3
Jakieś pomysły na to, co się tutaj dzieje?
../..
.To rozwiązuje się rekurencyjnie i zwraca ścieżkę bezwzględną:
Lub wersja nieinteraktywna:
źródło
$ python -c "import os; print os.path.realpath('bin')"
>>/Users/jason/Applications
. Dowiązuję symbolicznie ~ / bin do ~ / Applications, aby mieć zunifikowany plik .bash_profile / $ PATH w systemach Mac i * nix.pwd
ifind
, o których mówiłem w pytaniu, rozwiązują pełną ścieżkę w systemach innych niż OS X. Jednak ich nie przetestowałem.Być może ta dyskusja na temat przepełnienia stosu jest pomocna: Jak rozwiązać dowiązania symboliczne w skrypcie powłoki. W szczególności rozważ tę odpowiedź .
źródło
GNU coreutils-8.15 dodał w 2012 r. Nowe narzędzie wiersza polecenia,
realpath
które robi to, co chcesz: rozwiązuje łańcuchy dowiązań symbolicznych i wyświetla wynik jako ścieżkę bezwzględną (domyślną) lub względną.Apple nie uwzględniają jeszcze
realpath
w MacOS (niestety oni zdają się unikać wszystkich narzędzi GPLv3), ale można łatwo zainstalować go samodzielnie, na przykład za pomocą Homebrew:brew install coreutils
.źródło
Możesz użyć
readlink -f
. Powtarza się przez wszystkie linki. Załóżmy, że link prowadzi do ścieżki, która jest dalszym linkiem. Chciałbyś mieć ostatnią ścieżkę absolutną.źródło
read link -f python3
na przykład użycie i buforowanie pełnego linku symbolicznego.-f
niepublikowany przez użytkownika OS X, ponieważ nigdy nie istniał w wersji readlink w OS OS.