Für denjenigen, der nicht funktioniert, erhalten wir, wenn wir das ls -l
Ergebnis betrachten, Folgendes:
[sparticvs@sparta test]$ ls -l build/
total 0
lrwxrwxrwx. 1 sparticvs sparticvs 6 Dec 17 16:08 client -> client
Nun zu verstehen, was hier los ist. Schauen wir uns den Befehl an, den Sie aufgerufen haben:
ln -s client build/client
Laut Manpage gibt es zwei mögliche Übereinstimmungen für dieses Format
SYNOPSIS
ln [OPTION]... [-T] TARGET LINK_NAME (1st form)
ln [OPTION]... TARGET... DIRECTORY (3rd form)
Es stimmt mit dem ersten Formular überein (seit dem ersten). Nun kann der "Zielname" oder client
in Ihrem Fall (gemäß dem vollständigen ln
Handbuch) beliebige Zeichenfolgen sein. Sie müssen sich im Moment zu nichts entschließen, können sich aber zu etwas in der Zukunft entschließen. Was Sie mit Ihrem Aufruf erstellen, ist ein "baumelnder Symlink", und das System hindert Sie nicht daran, diese zu erstellen.
Nun ist Ihr zweiter Aufruf ein ln -s ../client build/client
sogenannter "relativer Symlink" (wie Sie in Ihrem eigenen Beitrag vermerkt haben). Es gibt einen zweiten Typ, und das ist ein "absoluter Symlink", der beim Ausführen aufgerufen würde ln -s /home/user/client build/client
.
Dies ist kein Fehler. Nach dem Handbuch heißt es:
Wenn Sie einen relativen Symlink an einem anderen Ort als dem aktuellen Verzeichnis erstellen, unterscheidet sich die Auflösung des Symlinks von der Auflösung der gleichen Zeichenfolge aus dem aktuellen Verzeichnis. Aus diesem Grund ziehen es viele Benutzer vor, zuerst das Verzeichnis zu ändern, in dem der relative Symlink erstellt wird, damit die Tab-Vervollständigung oder eine andere Dateiauflösung dasselbe Ziel findet wie das, was im Symlink platziert wird.
-- von info coreutils 'ln invocation'
Das heißt, Sie MÜSSEN entweder den relativen oder den absoluten Pfad zum Ziel verwenden.