как создать символическую ссылку, которая работает относительно рабочего каталога

рассмотрим следующее:

x/
    ph/
        file1.txt -> ./../file1.txt
    file1.txt
y/
    ph/ -> /x/ph/ (this is full absolute path of x/ph)
    file1.txt

/y/ph - символическая ссылка на папку ph в x. и file1.txt является относительной символической ссылкой.

он работает правильно в папке x, однако, если вы откроете /y/ph/file1.txt вместо открытия /y/file1.txt, он откроет /x/file1.txt

, цель здесь состоит в том, чтобы иметь один и тот же каталог (скажем, программу) в нескольких местах с разными конфигурационными файлами без необходимости иметь несколько копий программы.

Согласно справке ln

Символьные ссылки могут содержать произвольный текст; если позже разрешено, относительная ссылка интерпретируется относительно его родительского каталога.

, поэтому относительные ссылки относятся к фактическому пути к папке, а не к текущему рабочему каталогу. Вопрос в следующем: есть ли обходные пути для этого?

контрольный пример:

mkdir x y x/ph
echo x1 > ./x/file1.txt
echo y1 > ./y/file1.txt
ln -s $(pwd)/x/ph ./y/ph
cd ./x/ph
ln -s ./../file1.txt
cd ../..
cat ./x/ph/file1.txt
cat ./y/ph/file1.txt

ожидаемый результат - x1 y1, но вы получите x1 x1

Редактировать:

, чтобы прояснить вопрос, запустите контрольный пример в пустой папке. и попробуйте следующие команды в папке:

bor@borpc:~/tmp$ readlink -f ./x/ph/file.txt
/home/bor/tmp/x/ph/file.txt
bor@borpc:~/tmp$ readlink -f ./y/ph/file.txt
/home/bor/tmp/x/ph/file.txt
--------------^

я хочу, чтобы x там было y. то есть для разрешения относительной символической ссылки на основе pwd (текущий рабочий каталог или путь, используемый для доступа к нему), а не фактического пути к фактическому файлу.

Если это возможно, как можно достичь такого поведения.

2
задан 24 April 2015 в 18:19

1 ответ

Я немного смущен. Вы могли бы сделать символьную ссылку, начинающуюся в корневом каталоге (я имею в виду /). Например,

ln -s /root/try/d s

ls -l  
total 0  

-rw-r--r-- 1 root root  0 Apr 24 16:15 d  
lrwxrwxrwx 1 root root 11 Apr 24 16:18 s -> /root/try/d  
0
ответ дан 25 April 2015 в 04:19

Другие вопросы по тегам:

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