Para aquele que não funciona, se olharmos para o ls -l
resultado, obtemos o seguinte:
[sparticvs@sparta test]$ ls -l build/
total 0
lrwxrwxrwx. 1 sparticvs sparticvs 6 Dec 17 16:08 client -> client
Agora, para entender o que está acontecendo aqui. Vamos dar uma olhada no comando que você chamou:
ln -s client build/client
De acordo com a página do manual, há duas correspondências possíveis para este formato
SYNOPSIS
ln [OPTION]... [-T] TARGET LINK_NAME (1st form)
ln [OPTION]... TARGET... DIRECTORY (3rd form)
Ele corresponderá no primeiro formulário (desde o primeiro). Agora, o "nome do destino" ou, client
no seu caso, pode ser (de acordo com o ln
manual completo ) seqüências arbitrárias. Eles não precisam resolver nada agora, mas podem resolver algo no futuro. O que você está criando com sua chamada é um "link simbólico dangling" e o sistema não impede que você os crie.
Agora sua segunda invocação ln -s ../client build/client
é chamada de "link simbólico relativo" (como você observou em sua própria postagem). Existe um segundo tipo e esse é um "link simbólico absoluto" que seria chamado por fazer ln -s /home/user/client build/client
.
Isso não é um bug. De acordo com o manual, afirma:
Ao criar um link simbólico relativo em um local diferente do diretório atual, a resolução do link simbólico será diferente da resolução da mesma sequência do diretório atual. Portanto, muitos usuários preferem alterar primeiro os diretórios para o local em que o link simbólico relativo será criado, para que a conclusão da guia ou outra resolução de arquivo encontre o mesmo destino do que será colocado no link simbólico.
-- a partir de info coreutils 'ln invocation'
Dito isto, você DEVE usar o caminho relativo ou absoluto para o alvo.