Я могу сделать это:
$ pwd
/home/beau
$ ln -s /home/beau/foo/bar.txt /home/beau/bar.txt
$ readlink -f bar.txt
/home/beau/foo/bar.txt
Но я хотел бы иметь возможность сделать это:
$ pwd
/home/beau
$ cd foo
$ ln -s bar.txt /home/beau/bar.txt
$ readlink -f /home/beau/bar.txt
/home/beau/foo/bar.txt
Это возможно? Могу ли я как-то разрешить относительный путь и передать его ln
?
ln -s $(pwd)/bar.txt ~/
или включите скрипт установки.ln -s foo/bar.txt /home/beau/bar.txt
Ответы:
Если вы создадите символическую ссылку на относительный путь, она сохранит ее как относительную символическую ссылку, а не как абсолютную, как показывает ваш пример. Это вообще хорошая вещь. Абсолютные символические ссылки не работают, когда файловая система смонтирована в другом месте.
Причина, по которой ваш пример не работает, заключается в том, что он относится к родительскому каталогу символической ссылки, а не к тому, где
ln
выполняется.Ты можешь сделать:
Или для этого имеет значение:
Важно понимать, что первый аргумент после
ln -s
сохраняется как цель символической ссылки. Это может быть любая произвольная строка (с единственными ограничениями, что она не может быть пустой и не может содержать символ NUL), но в то время, когда символическая ссылка используется и разрешается, эта строка понимается как относительный путь к родительский каталог символической ссылки (когда он не начинается с/
).источник
~
, сработает ли что-то подобное .Если вы используете более новые coreutils (я использую coreutils-8.22-11), у него есть возможность сделать это:
может содержать произвольный текст; если разрешено позже, относительная ссылка - -r, --relative создать символические ссылки относительно расположения ссылки
Например:
источник
-r
. Используя Mac, хотя.coreutils
> = 8.16 (источник: superuser.com/a/837935/403979 )Извините но нет. Символические ссылки относятся к местоположению, в котором находится ссылка, а не к месту, в котором вы находились при создании ссылки. Есть несколько веских причин для такого поведения, большинство из которых включают монтирование удаленных файловых систем.
источник
Есть удобная небольшая утилита под названием
symlinks
(изначально Mark Lords, теперь поддерживаемая J. Brandt Buckley), присутствующая во многих дистрибутивах Linux.Чтобы преобразовать все абсолютные символические ссылки в каталоге в относительные:
К сожалению, нет возможности конвертировать одну ссылку, вам нужно сначала переместить ее в собственный каталог.
источник
Вы можете попробовать:
Но это делает символическую ссылку на абсолютный путь. Ваш текстовый вопрос просит упомянуть относительный путь ...
Обычно относительный путь - это то, что вы хотите и что
ln -s
вам дает. Я думаю, что вы хотите, это:источник
Поскольку наиболее распространенные оболочки расширяют пути, чтобы создать относительную символическую ссылку, вы должны указать «исходный путь».
Также
-s
параметр означает--symbolic
.ln
создает жесткие ссылки по умолчанию.источник
Если вы уверены, что у вас нет шансов изменить точки монтирования, вы можете добиться того, что вы пытаетесь сделать, в оболочке bash, например:
Это предполагает, что вы находитесь в целевом каталоге при создании символической ссылки.
источник