Per quello che non funziona, se guardiamo il ls -l
risultato, otteniamo quanto segue:
[sparticvs@sparta test]$ ls -l build/
total 0
lrwxrwxrwx. 1 sparticvs sparticvs 6 Dec 17 16:08 client -> client
Ora per capire cosa sta succedendo qui. Diamo un'occhiata al comando che hai chiamato:
ln -s client build/client
Secondo la pagina man, ci sono due possibili corrispondenze per questo formato
SYNOPSIS
ln [OPTION]... [-T] TARGET LINK_NAME (1st form)
ln [OPTION]... TARGET... DIRECTORY (3rd form)
Si abbinerà al primo modulo (dal suo primo). Ora, il "nome target" o, client
nel tuo caso, può essere (secondo il ln
manuale completo ) stringhe arbitrarie. Non devono risolvere nulla in questo momento, ma possono risolvere qualcosa in futuro. Quello che stai creando con la tua invocazione è un "link simbolico penzolante" e il sistema non ti impedisce di crearli.
Ora la tua seconda invocazione ln -s ../client build/client
è ciò che viene chiamato un "link simbolico relativo" (come hai notato nel tuo post). C'è un secondo tipo e questo è un "link simbolico assoluto" che verrebbe chiamato facendo ln -s /home/user/client build/client
.
Questo non è un bug. Secondo il manuale si afferma:
Quando si crea un collegamento simbolico relativo in una posizione diversa rispetto alla directory corrente, la risoluzione del collegamento simbolico sarà diversa dalla risoluzione della stessa stringa dalla directory corrente. Pertanto, molti utenti preferiscono prima modificare le directory nella posizione in cui verrà creato il relativo collegamento simbolico, in modo che il completamento della scheda o la risoluzione di altri file trovino la stessa destinazione di ciò che verrà inserito nel collegamento simbolico.
-- a partire dal info coreutils 'ln invocation'
Detto questo, DEVI utilizzare il percorso relativo o assoluto verso l'obiettivo.