Cómo resolver enlaces simbólicos en un script de shell
Dada una ruta absoluta o relativa (en un sistema tipo Unix), me gustaría determinar la ruta completa del objetivo después de resolver cualquier enlace simbólico intermedio. Puntos de bonificación por resolver también la ~ notación de nombre de usuario al mismo tiempo.
Si el objetivo es un directorio, podría ser posible chdir () en el directorio y luego llamar a getcwd (), pero realmente quiero hacer esto desde un script de shell en lugar de escribir un ayudante de C. Desafortunadamente, los shells tienden a tratar de ocultar la existencia de enlaces simbólicos al usuario (esto es bash en OS X):
$ ls -ld foo bar
drwxr-xr-x 2 greg greg 68 Aug 11 22:36 bar
lrwxr-xr-x 1 greg greg 3 Aug 11 22:36 foo -> bar
$ cd foo
$ pwd
/Users/greg/tmp/foo
$
Lo que quiero es una función resolve () tal que cuando se ejecute desde el directorio tmp en el ejemplo anterior, resolve ("foo") == "/Users/greg/tmp/bar"