Cambiar el directorio padre (../) con enlaces simbólicos

32

Tengo un enlace simbólico

~/link -> ~/a/really/long/path

Cuando lo hago

cd ~/link
cd ..    

me lleva a

~

pero quiero ir a

~/a/really/long

¿Hay alguna forma de hacer esto?

Estoy usando bash

Xodarap
fuente
1
¿Quiere decir cd ~/a/really/long/pathentonces cd ..le pone en ~el momento actual: No puedo reproducir eso.
Mikel
1
@Mikel: No, primero crea un enlace simbólico para ~/a/really/long/pathluego cd a eso y luego a ... Deberías terminar de nuevo en ~ (suponiendo que ahí es donde empezaste).
Xodarap
¿Mi edición es precisa? No pude entender la pregunta antes.
Mikel

Respuestas:

38

Bash (así como ksh, zsh e incluso ash) realiza un seguimiento de los cambios en el directorio para que cd /foo/bar && cd ..siempre te lleve /fooincluso si bares un enlace simbólico. Pase la -Popción a cdignorar el cambio seguido y siga la estructura de directorios "física":

cd -P ..

Consulte help cdo man builtinspara obtener documentación sobre el bash incorporado cd. Si realmente no le gusta la función de seguimiento de directorios, puede desactivarla set -Pen bash ( set -o no_chase_linken zsh).

Gilles 'SO- deja de ser malvado'
fuente
1
La forma en que leí la pregunta, ¿el OP -Po -o physicalya establecido?
Mikel
+1, pero sugiere un enlace a la página de manual.
Faheem Mitha
@Mikel: No, la pregunta dice que está siguiendo el enlace simbólico, no la estructura del directorio físico.
Faheem Mitha
Lo sentimos, en realidad no intenté editar tu publicación. Edición sugerida enviada ahora.
Faheem Mitha
4

También puede usar readlink para encontrar la ruta física a este directorio, luego ir un directorio más arriba:

cd $(readlink -f .)/..
dhasenan
fuente
3

Un método que podría usar es usar un alias en lugar de un enlace simbólico para llevarlo a ~ / a / really / long / path. Ese es el método que uso, desde entonces solo puedo escribir un simple comando 1/2 / etcétera en lugar del enlace simbólico cd

Wipqozn
fuente