Restaurar la funcionalidad 'cd ..' después de seguir un enlace simbólico

13

Si creo un enlace simbólico en la terminal con un comando como

ln -s /path/to/some/directory symbolicLink

y luego sigue el enlace con

cd symbolicLink

el terminal parece pensar que el cwd es ~/symbolicLink/a pesar de que realmente se está mostrando ~/path/to/some/directory/(suponiendo que el enlace se haya realizado ~, por supuesto). Lo que esto significa es que si cd ..escribo me devuelven a ~, porque el terminal 'piensa' que este es el padre del cwd.

¿Qué necesitaría para cambiar de tal manera que cd ..me llevara ~/path/to/some/, es decir, el verdadero padre de ~/path/to/some/directory/?

Val
fuente

Respuestas:

5

Hay una advertencia sutil en el cd -Pcomportamiento (publicado como respuesta debido a la longitud):

$ dir1=$(mktemp --directory)
$ dir2=$(mktemp --directory)
$ ln -s -- "$dir1" /tmp/start
$ ln -s -- "$dir2" "$dir1"
$ cd "/tmp/start/"*
$ cd -P ..

¿Qué debería pwdimprimir ahora? Lógicamente, podría ser

  1. $dir1, si lo cd -P ..hace cd ..primero y cd -- "$(readlink -f)"después, o
  2. /tmp, si lo cd -P ..hace cd -- "$(readlink -f)"primero y cd ..luego.

De hecho, hace lo último, lo que significa que pwdes intuitivamente dos niveles más alto que el directorio "padre".

l0b0
fuente
1
¡Gracias! cd -Ptodavía resuelve el problema que estaba enfrentando, pero aún es útil saberlo.
Val
2

Una forma alternativa es ejecutar:

cd $(/bin/pwd)/..
jlliagre
fuente
2

Siento su dolor: considero bashque básicamente está roto para uso interactivo debido a este comportamiento.

tcshes un shell mucho más fácil de usar para uso interactivo. Vaya basha la programación (si insiste en escribir scripts de shell cuando hay alternativas mucho mejores entre los muchos lenguajes de scripting).

Para cambiar shells para cualquier usuario, escriba chshen la línea de comando y siga las instrucciones (nuevamente, recomiendo /bin/tcshy el excelente libro de O'Reilly con csh y tcsh , disponible para casi nada usado).

dodgethesteamroller
fuente
Desde que escribí esta respuesta, aprendí a dejar de preocuparme y amar a Bash para su uso interactivo. Pero todavía no puedo lidiar con el cdcomportamiento predeterminado de los enlaces simbólicos. Tengo que recordar poner set -o physicalen mi .bashrco .bash_profilepara cada máquina que uso.
dodgethesteamroller