Para el que no funciona, si miramos el ls -l
resultado, obtenemos lo siguiente:
[sparticvs@sparta test]$ ls -l build/
total 0
lrwxrwxrwx. 1 sparticvs sparticvs 6 Dec 17 16:08 client -> client
Ahora para entender lo que está pasando aquí. Veamos el comando que llamaste:
ln -s client build/client
Según la página del manual, hay dos posibles coincidencias para este formato
SYNOPSIS
ln [OPTION]... [-T] TARGET LINK_NAME (1st form)
ln [OPTION]... TARGET... DIRECTORY (3rd form)
Coincidirá en la primera forma (desde su primera). Ahora, el "nombre de destino" o client
en su caso, pueden ser (según el ln
manual completo ) cadenas arbitrarias. No tienen que resolver nada en este momento, pero pueden resolver algo en el futuro. Lo que está creando con su invocación es un "enlace simbólico colgante" y el sistema no le impide crearlos.
Ahora su segunda invocación ln -s ../client build/client
es lo que se llama un "enlace simbólico relativo" (como señaló en su propia publicación). Hay un segundo tipo y es un "enlace simbólico absoluto" al que se llamaría haciendo ln -s /home/user/client build/client
.
Esto no es un error. Según el manual dice:
Al crear un enlace simbólico relativo en una ubicación diferente al directorio actual, la resolución del enlace simbólico será diferente a la resolución de la misma cadena del directorio actual. Por lo tanto, muchos usuarios prefieren cambiar primero los directorios a la ubicación donde se creará el enlace simbólico relativo, para que la finalización de la pestaña u otra resolución de archivo encuentre el mismo objetivo que el que se colocará en el enlace simbólico.
-- desde info coreutils 'ln invocation'
Dicho esto, DEBE utilizar la ruta relativa o absoluta al objetivo.