Для того, кто не работает, если мы посмотрим на ls -l
результат, мы получим следующее:
[sparticvs@sparta test]$ ls -l build/
total 0
lrwxrwxrwx. 1 sparticvs sparticvs 6 Dec 17 16:08 client -> client
Теперь, чтобы понять, что здесь происходит. Давайте посмотрим на команду, которую вы вызвали:
ln -s client build/client
Согласно Man Page, есть два возможных совпадения для этого формата
SYNOPSIS
ln [OPTION]... [-T] TARGET LINK_NAME (1st form)
ln [OPTION]... TARGET... DIRECTORY (3rd form)
Он будет совпадать с первой формой (начиная с первой). Теперь «целевое имя» или, client
в вашем случае, может быть (согласно полному ln
руководству) произвольной строкой. Им не нужно ничего решать прямо сейчас, но они могут разрешить что-то в будущем. То, что вы создаете с помощью своего вызова, является «висячей символической ссылкой», и система не удерживает вас от их создания.
Теперь ваш второй вызов ln -s ../client build/client
- это то, что называется «относительная символическая ссылка» (как вы отметили в своем посте). Существует второй тип, и это «абсолютная символическая ссылка», которая будет вызываться при выполнении ln -s /home/user/client build/client
.
Это не ошибка. Согласно инструкции в нем говорится:
При создании относительной символической ссылки в другом месте, чем текущий каталог, разрешение символической ссылки будет отличаться от разрешения той же строки из текущего каталога. Поэтому многие пользователи предпочитают сначала изменить каталоги на место, где будет создана относительная символическая ссылка, чтобы завершение табуляции или другое разрешение файла находили ту же цель, что и размещенная в символической ссылке.
-- из info coreutils 'ln invocation'
Тем не менее, вы ДОЛЖНЫ использовать относительный или абсолютный путь к цели.