Я пробовал использовать относительный pwd, но это не работает.
Мой текущий пароль отличается от целевого пути и исходного пути (откуда нужно создать ссылку).
Я не знаю домашний каталог, поэтому не могу использовать относительный путь к домашнему. Абсолютный путь не требуется.
Как создать мягкую ссылку, используя относительный путь?
решение1
Относительная символическая ссылка относится к родительскому каталогу и не зависит от текущего каталога любого процесса или домашнего каталога любого пользователя.
Например, если /some/dir/link
это символическая ссылка на ../foo/bar
, то это символическая ссылка на /some/dir/../foo/bar
( /some/foo/bar
если /some/dir
сам по себе не является символической ссылкой), независимо от того, какой у вас текущий или домашний каталог.
Если вы хотите создать новую символическую ссылку на файл относительно текущего каталога (например, на bin/ls
файл в вашем текущем /home/stephane
каталоге), то вы можете сделать (в оболочках типа POSIX или fish
):
ln -s -- "$PWD/bin/ls" /some/dir/link
Что создаст абсолютную символическую ссылку (на /home/stephane/bin/ls
). Чтобы создать относительную символическую ссылку, вам понадобится:
ln -s ../../home/stephane/bin/ls /some/dir/link
(предполагается /some
, что и /some/dir
сами по себе не являются символическими ссылками)
В GNU ln
есть -r
опция, которая поможет вам вычислить этот путь:
ln -rs bin/ls /some/dir/link
(что создаст ту же символическую ссылку на ../../home/stephane/bin/ls
).
решение2
Вы можете сделать символическую ссылку, используя относительный путь
например (вы хотите создать символическую ссылку из папки bb
, которая расположена в ../../bb
текущем рабочем каталоге, наmylink
ln -s ../../bb/ mylink
$ ls -lsa mylink
0 lrwxrwxrwx 1 user user 9 Apr 18 15:51 mylink -> ../../bb/
Другой пример, где mylink находится в связанной папке дляpwd
mkdir ../../tst
$ ln -s ../../bb/ ../../tst/mylink
$ ls -lsa ../../tst/mylink
0 lrwxrwxrwx 1 user user 9 Apr 18 16:08 ../../tst/mylink -> ../../bb/