73 votos

Cómo obtener el resuelto por completo de ruta de acceso de un enlace simbólico en la Terminal?

Tengo una maraña de python instalaciones en mi portátil. Yo estaba buscando en los archivos ejecutables /usr/local/bin y todos ellos son enlaces simbólicos a ../../../Library......

Hay algo de extraño comportamiento de los alrededores de este. Si hago ls -lhaG veo ---> y la ruta de acceso 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, me parece que no puede obtener cualquiera de las herramientas de línea de comandos para resolver ese camino y mostrar la ruta de acceso real a python3. He encontrado algunas cositas de aquí y de allí, en uso de pwd -P y find de utilidad para ello. El problema es que estos no parecen funcionar en OS X de la forma en que describen a trabajar en linux (es decir, la salida de la ruta de acceso completa para el enlace simbólico). Se acaba de imprimir los enlaces simbólicos camino 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 sobre lo que está pasando aquí?

52voto

Christopher Scott Puntos 665

Creo que pwd -P y readlink van a ser sus amigos para esta tarea.

"¿Cómo puedo obtener el comportamiento de GNU readlink -f en un Mac?" es un recurso práctico.

pwd -P sólo funciona si usted está dentro de un enlace simbólico al directorio:

14:07:13 jason@mac ~ $ cd bin
14:08:08 jason@mac bin $ pwd -P
/Users/jason/Applications

readlink obras de especificar el objetivo (por lo que puede ser utilizado en contra de archivos):

14:09:03 jason@mac ~ $ readlink bin
Applications

14:09:34 jason@mac ~ $ readlink /var
private/var

La salida de readlink parece estar en relación a los padres de el destino especificado.

Ex: El padre de /var es /, lo private/var es correcta, relativa a /. Por el ejemplo anterior de bin -> Applications, ambas se encuentran en mi Directorio Home, no importa dónde puedo ejecutar, el resultado es el mismo.

26voto

DSC Puntos 146

Esto se resuelve de forma recursiva y devuelve una ruta de acceso absoluta:

$ python
>>> import os
>>> os.path.realpath("/usr/local/bin/python3")

O la versión no-interactiva:

python -c "import os; print os.path.realpath('/usr/local/bin/python3')"

1voto

simonair Puntos 251

Tal vez esta discusión sobre Stack Overflow es de ayuda: Cómo resolver los enlaces simbólicos en un script de shell En particular, por favor considere esta respuesta.

-3voto

atebits Puntos 783

Usted puede usar readlink -f. Se reproduce a través de todos los enlaces. Supongamos que el enlace es un camino que seguir un enlace. Te gustaría tener el final de la ruta de acceso absoluta.

AppleAyuda.com

AppleAyuda es una comunidad de usuarios de los productos de Apple en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X