bash
realiza un seguimiento de la ruta del directorio actual lógico, como se muestra en su aviso, e interpreta cosas como cd ..
de acuerdo a eso. Esto hace que las cosas sean un poco más consistentes si solo usa esas rutas en cd
(o pushd
), a costa de que sucedan cosas inesperadas si luego espera que suceda lo mismo con rutas en argumentos de comando (o comandos internos; emacs
y vim
tienen sus propias reglas configurables para el manejo de enlaces simbólicos, pero la mayoría de los comandos dependen del kernel para manejarlos).
Según help cd
,
Options:
-L force symbolic links to be followed: resolve symbolic
links in DIR after processing instances of `..'
-P use the physical directory structure without following
symbolic links: resolve symbolic links in DIR before
processing instances of `..'
En otras palabras, -L
significa usar la lógica estructura, mientras que -P
utiliza la realidad física estructura de directorios.
La estructura lógica es así,
$ tree a
a
└── b
└── symlink -> ..
La estructura física real cuando vas a a/b/symlink
es,
a
Si desea utilizar el real ..
, entonces también debes usar cd -P
:
The -P option says to use the physical directory
structure instead of following symbolic links (see
also the -P option to the set builtin command);
the -L option forces symbolic links to be followed.
Un ejemplo,
$ cd
$ cd a/b/symlink # physical location is at a/
$ cd .. # now is at a/b
$ cd symlink # goes back to a/b/symlink
$ cd -P .. # follow physical path (resolve all symlinks)
$ pwd -P # -P is optional here to show effect of cd ..
/home/sarnold
$