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


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).


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 .)/..

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

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.