![Enlaces simbólicos de Linux: ¿cómo ir al directorio señalado?](https://rvso.com/image/1558038/Enlaces%20simb%C3%B3licos%20de%20Linux%3A%20%C2%BFc%C3%B3mo%20ir%20al%20directorio%20se%C3%B1alado%3F.png)
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 bash
los cd
usos empotrados -P
e -L
interruptores; pwd
los 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 cd
y help pwd
. Tenga en cuenta que es posible que también tenga un ejecutable (es decir, que no sea un shell incorporado) como /bin/pwd
ese y que debería comportarse de manera similar. En mi Kubuntu la diferencia es el pwd
uso integrado sin ninguna opción, -L
mientras que /bin/pwd
por defecto usa -P
.
Puede ajustar el comportamiento predeterminado de la cd
función integrada mediante set -P
( cd
actúa como cd -P
) y set +P
( cd
actúa como cd -L
). Ver help set
para más detalles.
Respuesta2
Úselo readlink
para 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 cd
a eso.
cd `readlink /home/user/Desktop/project`
Aquí, readlink
resuelve el nombre del enlace y luego pasa al cd
usosustitución.
Si ya está en la carpeta Escritorio, entonces no es necesario especificar la ruta absoluta, simplemente project
será 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`;
}