Dado este ejemplo:
mkdir a
ln -s a b
ln -s b c
ln -s c d
Si ejecuto:
ls -l d
Mostrará:
d -> c
¿Hay alguna forma de lsmostrar algún otro comando de Linux d -> c -> b -> a?
                    
                        linux
                                shell
                                symbolic-link
                                
                    
                    
                        Kalecser
fuente
                
                fuente

Respuestas:
Solo usa
namei:fuente
ls. ¡Gracias!readlink -e <link>nota: readlink a por sí mismo devuelve b
nota # 2: junto con find -l, una utilidad para enumerar las cadenas podría escribirse fácilmente en perl, pero también debe ser lo suficientemente inteligente como para detectar bucles
readlink no generará nada si tiene un bucle. Esto es mejor que quedarse atascado, supongo.
fuente
brew install coreutilsygreadlink -e <link>Aquí hay una función recursiva en Bash:
En múltiples líneas:
Ejemplos:
Requiere
stat(1)que puede no estar presente en algunos sistemas.Fallará si los nombres contienen backticks, comillas simples o "->". Se atasca en un bucle con bucles de enlace simbólico (esto podría resolverse usando una matriz asociativa en Bash 4). Exporta una variable llamada "cadena" sin importar si ya está en uso.
Puede haber otros problemas con esto.
Editar:
Se solucionó un problema con algunos enlaces simbólicos relativos. Algunos todavía no funcionan, pero la versión a continuación no requiere que exista el objetivo del enlace.
Se agregó una versión que usa readlink:
fuente
readlinkno parece mostrar eso. Java en Ubuntu es:/usr/bin/java -> /etc/alternatives/java -> /usr/lib/jvm/java-6-openjdk/jre/bin/javaPodrías simplemente postprocesar la salida de namei con algo como
awkugrepobtener las líneas que deseas:o
fuente