Prueba:
ABSOLUTE_PATH=$(cd /home/nohsib/dvc/../bop; pwd)
Lo que estás buscando es readlink
:
absolute_path=$(readlink -m /home/nohsib/dvc/../bop)
Tenga en cuenta: Necesitas usar readlink
de GNU implementación que ofrece la opción "-m". readlink
de BSD por ejemplo, no.
Si desea hacerlo sin seguir ningún enlace simbólico, intente usar realpath
con opción -s
:
$ realpath -s /home/nohsib/dvc/../bop
/home/nohsib/bop
Tenga en cuenta que con realpath
, normalmente deben existir todos menos el último componente. Entonces, para que lo anterior funcione, todo lo siguiente debe estar presente en el sistema de archivos:
/home
/home/nohsib
/home/nohsib/dvc
Pero puede omitir ese requisito usando el -m
opción.
$ realpath -sm /home/nohsib/dvc/../bop
/home/nohsib/bop
(Nota realpath
no está disponible en todos los sistemas, especialmente en los sistemas más antiguos que no son Debian. Para aquellos que trabajan en Linux embebido, lamentablemente Busybox realpath
no es compatible con -s
o -m
interruptores.)
Un problema con el uso:
ABSOLUTE_PATH=$(cd ${possibleDirectory}; pwd)
es que si ${possibleDirectory} no existe, ABSOLUTE_PATH se establecerá en el directorio actual. Lo cual probablemente NO es lo que quieres o esperas.
Creo que usar esta versión puede ser más deseable en general:
ABSOLUTE_PATH=$(cd ${possibleDirectory} && pwd)
Si ${possibleDirectory} no existe o no es accesible debido a la falta de permisos de acceso al directorio, ABSOLUTE_PATH contendrá la cadena vacía.
La ventaja de esto es que luego puede probar la cadena vacía o dejar que falle naturalmente, según las circunstancias. La configuración predeterminada del directorio actual en el caso de un comando 'cd' fallido puede generar resultados muy inesperados y posiblemente desastrosos (por ejemplo, rm -rf "$ABSOLUTE_PATH" )