
En bash 4.4.12
, help cd
dice:
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 `..' -e if the -P option is supplied, and the current working directory cannot be determined successfully, exit with a non-zero status -@ on systems that support it, present a file with extended attributes as a directory containing the file attributes
Tengo dificultades para entender estas palabras y mi Google-fu no muestra nada.
- ¿Cuál es un ejemplo de cuándo
cd -P
se preferiríacd
? - ¿En qué se
cd -L
diferencia del estándarcd
? - ¿Cómo es posible que no se haya podido determinar correctamente el directorio de trabajo?
- ¿Cuál es un ejemplo de uso
-@
?
Respuesta1
Elmanual de bashda un poco más de detalle.
cd -P
garantiza que terminará con un camino "real":$ cd /tmp $ mkdir -p a/b $ ln -s a/b b $ cd b $ pwd /tmp/b $ cd -P ../b $ pwd /tmp/a/b
Usar significa que se desreferencia
-P
el enlace simbólico deb
a .a/b
La interacción con..
es que..
normalmente se procesa eliminando el componente de ruta anterior, si lo hay; no comprobando la ruta en el disco. Si utiliza muchos enlaces simbólicos, esto puede resultar muy confuso.cd -L
es equivalente al valor predeterminadocd
.El directorio de trabajo actual no se puede determinar si se ha eliminado:
$ cd /tmp $ mkdir -p c/d $ cd c/d $ rmdir ../d ../../c $ cd ..; echo $? cd: error retrieving current directory: getcwd: cannot access parent directories: No such file or directory 0
v.
$ cd -Pe ..; echo $? cd: error retrieving current directory: getcwd: cannot access parent directories: No such file or directory 1
No estoy seguro de esto (me imagino cómo se vería, pero Bash simplemente dice "
cd
::-@
opción no válida"; tengo la impresión de que actualmente solo está disponible en Solaris, necesitaO_XATTR
).