Tenho uma confusão de instalações python no meu laptop. Eu estava olhando para os executáveis /usr/local/bin
e todos eles são links simbólicos para../../../Library......
Há algum comportamento estranho em torno disso. Se eu fizer ls -lhaG
eu vejo --->
e o caminho relativo para o direito dos links simbólicos:
lrwxr-xr-x 1 root wheel 69B Dec 7 22:29 python3 -> ../../../Library/Frameworks/Python.framework/Versions/3.1/bin/python3
No entanto, não consigo obter nenhuma das ferramentas de linha de comando para resolver esse caminho e exibir o caminho real para python3. Eu encontrei alguns petiscos aqui e ali sobre o uso pwd -P
e o find
utilitário para fazer isso. O problema é que eles não parecem funcionar no OS X da maneira que as pessoas os descrevem trabalhando no Linux (ou seja, produzindo o caminho completo para o link simbólico). Eles apenas imprimem o caminho dos links simbólicos para mim:
FantasticMrFox:bin robert$ pwd -P python3
/usr/local/bin
FantasticMrFox:bin robert$ find `pwd -P` -name python3
/usr/local/bin/python3
Alguma idéia do que está acontecendo aqui?
../..
.Isso resolve recursivamente e retorna um caminho absoluto:
Ou a versão não interativa:
fonte
$ python -c "import os; print os.path.realpath('bin')"
>>/Users/jason/Applications
. Eu vinculo ~ / bin a ~ / Applications para ter um .bash_profile / $ PATH unificado nos sistemas Mac e * nix.pwd
efind
sobre os quais falei na questão resolvem o caminho completo em sistemas diferentes do OS X. Ainda não os testei.Talvez esta discussão sobre Stack Overflow seja útil: Como resolver links simbólicos em um script de shell Em particular, considere esta resposta .
fonte
O GNU coreutils-8.15 adicionou em 2012 uma nova ferramenta de linha de comando
realpath
que faz o que você deseja: resolve cadeias de links simbólicos e gera o resultado como um caminho absoluto (padrão) ou relativo.A Apple ainda não inclui
realpath
no MacOS (que infelizmente parece shun todas as ferramentas GPLv3), mas você pode facilmente instalá-lo sozinho, por exemplo, usando Homebrew:brew install coreutils
.fonte
Você pode usar
readlink -f
. Ele se repete através de todos os links. Suponha que o link seja para um caminho que é mais um link. Você gostaria de ter o caminho absoluto final.fonte
read link -f python3
por exemplo, e armazenará em buffer o link simbólico completo para você.-f
nunca existiu na versão do OSlink do readlink.