Enlaces simbólicos de Linux: ¿cómo ir al directorio señalado?

Enlaces simbólicos de Linux: ¿cómo ir al directorio señalado?

Tengo un proyecto en su propio directorio:

/dir/a/proyecto/

Tengo un enlace simbólico a ese directorio en el escritorio:

/home/usuario/Escritorio/proyecto/

Cuando hago doble clic en ese enlace, la ventana del directorio que se abre es:

/home/usuario/Escritorio/proyecto/

en lugar del real, /dir/to/project.

Lo mismo ocurre con la línea de comando (Bash).

¿Es posible obtener lo que deseo, es decir, ir al directorio señalado, en lugar del simbólico?

Nota: el entorno de Windows que estoy usando ahora es Xfce, pero también me interesa una respuesta genérica.

Respuesta1

En bashlos cdusos empotrados -Pe -Linterruptores; pwdlos entiende de la misma manera:

user@host:~$ ln -s /bin foobar
user@host:~$ cd -L foobar      # follow link
user@host:~/foobar$ pwd -L     # print $PWD
/home/user/foobar
user@host:~/foobar$ pwd -P     # print physical directory
/bin
user@host:~/foobar$ cd -       # return to previous directory
/home/user
user@host:~$ cd -P foobar      # use physical directory structure
user@host:/bin$ pwd -L         # print $PWD
/bin
user@host:/bin$ pwd -P         # print physical directory
/bin

Además, cd ..puede resultar complicado:

user@host:/bin$ cd
user@host:~$ cd -L foobar
user@host:~/foobar$ cd -L ..   # go up, to ~/
user@host:~$ cd -L foobar
user@host:~/foobar$ cd -P ..   # go up, but not to ~/
user@host:/$

Ver help cdy help pwd. Tenga en cuenta que es posible que también tenga un ejecutable (es decir, que no sea un shell incorporado) como /bin/pwdese y que debería comportarse de manera similar. En mi Kubuntu la diferencia es el pwduso integrado sin ninguna opción, -Lmientras que /bin/pwdpor defecto usa -P.

Puede ajustar el comportamiento predeterminado de la cdfunción integrada mediante set -P( cdactúa como cd -P) y set +P( cdactúa como cd -L). Ver help setpara más detalles.

Respuesta2

Úselo readlinkpara resolver el enlace a su destino:

cd $(readlink thelink)

Es posible que desees definir una función en tu perfil de bash:

function cdl { local dir=$(readlink -e $1); [[ -n "$dir" ]] && cd $dir; }

Respuesta3

No sé cómo lograrlo en la GUI, pero hay una solución alternativa en la línea de comandos.

Digamos que su enlace simbólico es:

/home/user/Desktop/project/

entonces, puedes usarenlace de lecturacomando para obtener el enlace simbólico resuelto o su nombre de archivo canónico. Entonces solo cda eso.

cd `readlink /home/user/Desktop/project`

Aquí, readlinkresuelve el nombre del enlace y luego pasa al cdusosustitución.

Si ya está en la carpeta Escritorio, entonces no es necesario especificar la ruta absoluta, simplemente projectserá suficiente.

cd `readlink project`

Si visita esta carpeta con frecuencia, puede escribir una función de una línea en bash:

function cdproject
{
    cd `readlink home/user/Desktop/project`;
}

información relacionada