Символьная ссылка на текущую папку как абсолютный путь без ввода полного пути


10

Симлинки сохраняются ярлыки для относительных путей:

~/foo ln -s . ~/bar/foo
~/foo ls -l ~/bar
total 8
lrwxr-xr-x    1 me  me     1B 15 May 14:38 foo -> .

Файл ~/bar/fooявляется символической ссылкой на barтекущий каталог, т.е.

Что если я хочу создать символическую ссылку в другом каталоге на каталог, в котором я нахожусь в то время? Итак, в приведенном выше примере я нахожусь ~/fooи хочу создать ~/bar/fooв качестве символической ссылки на ~/foo. Конечно, мой текущий каталог может быть немного длиннее, чем 5 символов, и его не так просто набрать.

Ответы:


13

Я бы сказал тип

ln -s $PWD ~/bar/

или

ln -s `pwd` ~/bar/

Вы также можете использовать

ln -s $PWD ~/bar/

но я думаю, вы знали это, и это не то, что вы ищете. Пожалуйста, не могли бы вы обновить свой вопрос, чтобы объяснить, какова ваша цель?

Если путь содержит пробелы, то было бы целесообразно использовать:

ln -s "$PWD" ~/bar/

2
Двойные кавычки ваших $переменных и подстановок команд, иначе имена файлов с пробелами испортят ход. Вам также не нужен конец $(basename $PWD)(и вы забыли $(и цитирование :-))), так как в любом случае это имя ссылки по умолчанию.
Даниэль Андерссон

Я думаю, что я был глуп. Я думал, что попробовал pwdподход, и что-то пошло не так. Давайте объясним это ошибкой ID-ten-T
Гарет

@DanielAndersson вы правы, что он не поддерживает пробелы в пути. Хорошая точка зрения. так что для записи я обновлю ответ :)
Гюйгенс

4

Абсолютно:

ln -s "$(readlink -f .)" ~/bar

(может быть полезно для общности в сценариях) или просто

ln -s ~/foo ~/bar

Относительно:

ln -s ../foo ~/bar

Заполнение вкладки поможет вам набрать.


Из комментария Гравити и http://lists.gnu.org/archive/html/coreutils-announce/2012-03/msg00000.html :

* Примечательные изменения в выпуске 8.16 (2012-03-26) [стабильный]

...

lnтеперь принимает --relativeопцию, чтобы генерировать относительную символическую ссылку на цель, независимо от того, как указана цель.

Итак, с этой версией:

ln -s --relative . ~/bar

должен работать (на практике тождествен твой первый пример с добавлением --relativeпереключателя).


4
Последние coreutils могут автоматически создавать относительные символические ссылки, используя ln -s -r foo ~/bar.
user1686

@ Grawity: Интересно. Видимо, еще не в моей системе (Debian Sid).
Даниэль Андерссон

Похоже, он был добавлен для v8.16 22 марта, сообщает git.
user1686

1
Кроме того , что является преимуществом $(readlink -f .)над $PWD?
user1686

2
@ Grawity: не так много. Они работают по-разному, если текущий рабочий каталог был достигнут по ссылке. readlink -fЗатем будет символическая ссылка на абсолютный целевой путь текущего каталога, в то время как $PWDсимволическая ссылка на буквальный каталог, в котором он находится в данный момент. То, что требуется, вероятно, время от времени отличается, и, в первую очередь, вероятно, вообще не является проблемой.
Даниэль Андерссон
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.