Tengo un lío enredado de instalaciones de Python en mi computadora portátil. Estaba mirando los ejecutables /usr/local/bin
y todos son enlaces simbólicos a../../../Library......
Hay un comportamiento extraño que rodea esto. Si lo hago ls -lhaG
, veo --->
y la ruta relativa a la derecha de los enlaces simbólicos:
lrwxr-xr-x 1 root wheel 69B Dec 7 22:29 python3 -> ../../../Library/Frameworks/Python.framework/Versions/3.1/bin/python3
Sin embargo, parece que no puedo obtener ninguna de las herramientas de línea de comandos para resolver esa ruta y mostrar la ruta real a python3. He encontrado algunos datos aquí y allá sobre el uso pwd -P
y la find
utilidad para hacer esto. El problema es que estos no parecen funcionar en OS X de la forma en que las personas los describen trabajando en Linux (es decir, mostrando la ruta completa al enlace simbólico). Simplemente imprimen la ruta de enlaces simbólicos para mí:
FantasticMrFox:bin robert$ pwd -P python3
/usr/local/bin
FantasticMrFox:bin robert$ find `pwd -P` -name python3
/usr/local/bin/python3
¿Alguna idea de lo que está pasando aquí?
../..
.Esto se resuelve recursivamente y devuelve una ruta absoluta:
O la versión no interactiva:
fuente
$ python -c "import os; print os.path.realpath('bin')"
>>/Users/jason/Applications
. Enlace simbólico ~ / bin a ~ / Aplicaciones para tener un .bash_profile / $ PATH unificado en los sistemas Mac y * nix.pwd
y de losfind
que hablé en la pregunta resuelven la ruta completa en sistemas que no sean OS X. Sin embargo, no los he probado.Quizás esta discusión sobre Stack Overflow sea de ayuda: Cómo resolver enlaces simbólicos en un script de shell En particular, considere esta respuesta .
fuente
GNU coreutils-8.15 agregó en 2012 una nueva herramienta de línea de comandos
realpath
que hace lo que quiere: resuelve cadenas de enlaces simbólicos y genera el resultado como una ruta absoluta (predeterminada) o relativa.Apple aún no incluye
realpath
en macOS (que parecen tristemente a rechazar todas las herramientas GPLv3), pero se puede instalar fácilmente por sí mismo, por ejemplo, utilizando Homebrew:brew install coreutils
.fuente
Puedes usar
readlink -f
. Se repite a través de todos los enlaces. Supongamos que el enlace es a una ruta que es más un enlace. Te gustaría tener el camino absoluto final.fuente
read link -f python3
por ejemplo, y almacenará el enlace simbólico completo para usted.-f
nunca existió en la versión de OS X de readlink.