Vaste question qui ne me semble reposer que sur 3 réponses :
- L'utilisation de
stat, - L'utilisation de
file, - L'utilisation de
readlink.
Utilisons stat :
fly@Capote:~/tmp$ stat /tmp/totoz File: `/tmp/totoz' -> `/tmp/pipo' Size: 40 Blocks: 0 IO Block: 4096 lien symbolique Device: 808h/2056d Inode: 3744 Links: 1 Access: (0777/lrwxrwxrwx) Uid: ( 1000/ fly) Gid: ( 1000/ fly) Access: 2010-05-27 23:42:00.590730266 +0200 Modify: 2010-05-26 23:34:46.978029853 +0200 Change: 2010-05-26 23:34:46.978029853 +0200
On constate que le nom du fichier pointé est indiqué en première ligne. Donc, la ligne suivante devrait suffire :
fly@Capote:~/tmp$ a="$(stat /tmp/totoz | head -1 | awk '{print $NF}')" ; echo ${a}
`/tmp/pipo'
C'est bien mais pas top avec les quotes, d'où l'astuce suivante :
fly@Capote:~/tmp$ i=${#a}; echo ${a:1:(($i-2))}
/tmp/pipo
Utilisons file :
fly@mst:~/tmp$ file /tmp/totoz /tmp/totoz: symbolic link to `/tmp/pipo'
On constate maintenant qu'une seule ligne est retournée, mais il y a toujours ce problème de quotes. Donc, on résout de la même manière :
fly@mst:~/tmp$ a="$(stat /tmp/totoz | awk '{print $NF}')" ; echo ${a}
`/tmp/pipo'
fly@mst:~/tmp$ i=${#a}; echo ${a:1:(($i-2))}
/tmp/pipo
Utilisons readlink :
fly@Capote:~/tmp$ readlink /tmp/totoz /tmp/pipo
Bon, ben voilà; finalement je le préfère ce petit readlink (et de loin)...