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 ls
mostrar 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 coreutils
ygreadlink -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
readlink
no parece mostrar eso. Java en Ubuntu es:/usr/bin/java -> /etc/alternatives/java -> /usr/lib/jvm/java-6-openjdk/jre/bin/java
Podrías simplemente postprocesar la salida de namei con algo como
awk
ugrep
obtener las líneas que deseas:o
fuente