рассмотрим следующее:
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
(текущий рабочий каталог или путь, используемый для доступа к нему), а не фактического пути к фактическому файлу.
Если это возможно, как можно достичь такого поведения.
Я немного смущен. Вы могли бы сделать символьную ссылку, начинающуюся в корневом каталоге (я имею в виду /
). Например,
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