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

10433
Gareth

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

~/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 символов, и его не так просто напечатать.

10

2 ответа на вопрос

13
Huygens

I would say type

ln -s $PWD ~/bar/ 

or

ln -s `pwd` ~/bar/ 

You could use also

ln -s $PWD ~/bar/ 

but I guess you knew that and that is not what you are looking after. So please could you update your question to explain what's your goal?

If the path contains spaces, then it would be advisable to use:

ln -s "$PWD" ~/bar/ 
Дважды заключите в кавычки переменные `$` и подстановки команд, иначе имена файлов с пробелами испортят ход. Вам также не нужно заканчивать `$ (basename $ PWD)` (и вы забыли `$` (и кавычки :-))), так как в любом случае это имя ссылки по умолчанию. Daniel Andersson 12 лет назад 2
Я думаю, что я был глуп. Я думал, что попробовал подход `pwd` и что-то пошло не так. Давайте объясним это ошибкой ID-ten-T Gareth 12 лет назад 0
@DanielAndersson вы правы, что он не поддерживает пробелы в пути. Хорошая точка зрения. так что для записи обновлю ответ :) Huygens 12 лет назад 0
3
Daniel Andersson

Absolutely:

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

(might be good for generality in scripts) or just

ln -s ~/foo ~/bar 

Relatively:

ln -s ../foo ~/bar 

Tab completion will help you type.


From grawity's comment and http://lists.gnu.org/archive/html/coreutils-announce/2012-03/msg00000.html:

* Noteworthy changes in release 8.16 (2012-03-26) [stable]

...

ln now accepts the --relative option, to generate a relative symbolic link to a target, irrespective of how the target is specified.

So with this version:

ln -s --relative . ~/bar 

should work (with in practice is identical your first example, with the addition of the --relative switch).

Последние * coreutils * могут автоматически создавать относительные символические ссылки, используя `ln -s -r foo ~ / bar`. grawity 12 лет назад 4
@ Grawity: интересно. Видимо, еще не в моей системе (Debian Sid). Daniel Andersson 12 лет назад 0
Похоже, он был добавлен для v8.16 22 марта, сообщает git. grawity 12 лет назад 0
Кроме того, в чем преимущество `$ (readlink -f.)` Перед `$ PWD`? grawity 12 лет назад 1
@ Grawity: не так много. Они работают по-разному, если текущий рабочий каталог был достигнут по ссылке. Затем `readlink -f` будет символической ссылкой на абсолютный целевой путь текущего каталога, в то время как` $ PWD` будет символической ссылкой на буквальный каталог, в котором он находится в данный момент. То, что требуется, вероятно, время от времени отличается, и в первую очередь, вероятно, не проблема вообще. Daniel Andersson 12 лет назад 2