Слишком много уровней символьных ссылок

Согласно этой странице, формат бумаги по умолчанию читается из PAGE переменная среды.

Но для экранного просмотра страниц справочника, Вы рассмотрели что-то как man2html?

108
09.07.2014, 16:30
5 ответов

На первый взгляд, то, что вы предложили, работает на меня.

Пример

$ mkdir -p test/src test/firefox

$ tree --noreport -fp
.
`-- [drwxrwxr-x]  ./test
    |-- [drwxrwxr-x]  ./test/firefox
    `-- [drwxrwxr-x]  ./test/src

Сделайте символическую ссылку:

$ ln -s test/src test/firefox

$ tree --noreport -fp
.
`-- [drwxrwxr-x]  ./test
    |-- [drwxrwxr-x]  ./test/firefox
    |   `-- [lrwxrwxrwx]  ./test/firefox/src -> test/src
    `-- [drwxrwxr-x]  ./test/src

Запуск во 2-й раз обычно приводит к следующему:

$ ln -s test/src test/firefox
ln: failed to create symbolic link ‘test/firefox/src’: File exists

Так что, скорее всего, у вас тут происходит что-то еще. Я подозреваю, что у вас есть круговая ссылка, где ссылка указывает обратно на себя.

Вы можете использовать найти , чтобы немного выяснить это:

$ cd /suspected/directory
$ find -L ./ -mindepth 15
33
27.01.2020, 19:29

Как указывает Дубу в комментарии, проблема заключается в ваших относительных путях. У меня была похожая проблема с синхронизацией моей конфигурации nginx с /usr/local/etc/nginx до /etc/nginx. Если вы создадите свою сим-ссылку так:

cd /usr/local/etc
ln -s nginx/ /etc/nginx

/etc/nginx -> /etc/nginx, потому что путь к исходному коду относителен к пути ссылки. Решение простое, как и использование абсолютных путей:

ln -s /usr/local/etc/nginx /etc/nginx
179
27.01.2020, 19:29

Симлинки относятся к родительскому каталогу ссылки, а не к текущему каталогу процесса ln.

Когда вы делаете:

cd /top/dir
ln -s test/src test/firefox

(где test/firefox - каталог), вы создаете test/firefox/src симлинк, целью которого является test/src.

Этот test/src находится относительно каталога test/firefox, поэтому это симссылка на /top/dir/test/firefox/test/src.

Если бы вы хотели, чтобы эта симссылка была ссылкой на /top/dir/test/src, вам нужно было бы написать:

ln -s ../src test/firefox/

или

ln -s /top/dir/test/src test/firefox/

хотя в целом это плохая идея - делать симссылки на абсолютные пути, так как они легко нарушаются при переименовании каталогов или монтировании файловых систем в других местах.

В GNU ln вы можете использовать опцию -r, чтобы позволить ему самостоятельно выполнить вычисления:

$ ln -rs test/src test/firefox/
$ ls -ld test/firefox/src
lrwxrwxrwx 1 chazelas chazelas 6 Nov 29 15:59 test/firefox/src -> ../src
9
27.01.2020, 19:29

Use la ruta absoluta en lugar de la ruta relativa, luego funcionará.

Ej.:

ln -s /home/user/test/src /home/user/test/firefox
13
27.01.2020, 19:29

Ответ — использовать абсолютный путь. Но ввод полного пути к тому, что находится в текущем каталоге, может раздражать. Вы можете использовать подстановку команды pwd, чтобы избежать этого. Если ваша цель находится в текущем каталоге:

ln -s "$(pwd)"/target abs/path/to/link 

Если ваша ссылка должна быть в текущем каталоге:

ln -s /abs/path/to/target "$(pwd)"
1
27.01.2020, 19:29

Теги

Похожие вопросы