Nuestro grupo de redactores ha estado horas investigando la solución a tus preguntas, te dejamos la respuesta de modo que nuestro deseo es servirte de mucha apoyo.
Solución:
Como señala Dubu en un comentario, el problema radica en sus rutas relativas. Tuve un problema similar al enlazar mi configuración nginx desde /usr/local/etc/nginx
a /etc/nginx
. Si creas tu enlace simbólico así:
cd /usr/local/etc
ln -s nginx/ /etc/nginx
De hecho, creará el enlace /etc/nginx -> /etc/nginx, porque la ruta de origen es relativa a la ruta del enlace. La solución es tan simple como usar rutas absolutas:
ln -s /usr/local/etc/nginx /etc/nginx
Si desea usar rutas relativas y hacer que se comporten de la manera que probablemente espera, puede usar pwd
para poner la ruta del directorio de trabajo actual, así:
cd /usr/local/etc
ln -s "$(pwd)/nginx/" /etc/nginx
Le gustaría tener las comillas alrededor de la ruta, para asegurarse de que se escapen cosas como espacios en su ruta actual. Tenga en cuenta que debe usar comillas dobles al hacer esto, ya que $(pwd)
no se sustituirá si utiliza comillas simples.
En la superficie, lo que has sugerido que has probado funciona para mí.
Ejemplo
$ mkdir -p test/src test/firefox
$ tree --noreport -fp
.
`-- [drwxrwxr-x] ./test
|-- [drwxrwxr-x] ./test/firefox
`-- [drwxrwxr-x] ./test/src
Haz el enlace simbólico:
$ ln -s test/src test/firefox
$ tree --noreport -fp
.
`-- [drwxrwxr-x] ./test
|-- [drwxrwxr-x] ./test/firefox
| `-- [lrwxrwxrwx] ./test/firefox/src -> test/src
`-- [drwxrwxr-x] ./test/src
Ejecutarlo por segunda vez normalmente produciría esto:
$ ln -s test/src test/firefox
ln: failed to create symbolic link ‘test/firefox/src’: File exists
Así que es probable que tengas algo más aquí. Sospecho que tiene una referencia circular donde un enlace apunta hacia sí mismo.
Puedes usar find
para investigar esto un poco:
$ cd /suspected/directory
$ find -L ./ -mindepth 15
Los enlaces simbólicos son relativos al directorio principal del enlace, no al directorio actual del ln
proceso.
Cuando tu lo hagas:
cd /top/dir
ln -s test/src test/firefox
(dónde test/firefox
es un directorio), estás haciendo un test/firefox/src
enlace simbólico cuyo objetivo es test/src
.
Que test/src
es relativo a la test/firefox
directorio, por lo que es un enlace simbólico a /top/dir/test/firefox/test/src
.
Si quisiera que ese enlace simbólico fuera un enlace a /top/dir/test/src
tendrías que escribir:
ln -s ../src test/firefox/
O
ln -s /top/dir/test/src test/firefox/
aunque generalmente es una mala idea hacer enlaces simbólicos a rutas absolutas, ya que se rompen fácilmente cuando se cambia el nombre de los directorios o los sistemas de archivos se montan en otro lugar.
con GNU ln
puedes usar su -r
opción para dejar que haga el cálculo por sí mismo:
$ ln -rs test/src test/firefox/
$ ls -ld test/firefox/src
lrwxrwxrwx 1 chazelas chazelas 6 Nov 29 15:59 test/firefox/src -> ../src
Si guardas alguna perplejidad o disposición de beneficiar nuestro sección puedes realizar una crónica y con placer lo observaremos.