Якщо ви створите символьне посилання на відносний шлях, воно збереже його як відносне символьне посилання, не абсолютне, як показано у вашому прикладі. Це взагалі гарна річ. Абсолютні символьні посилання не працюють, коли файлова система встановлена в іншому місці.
Причина, за якою ваш приклад не працює, полягає в тому, що це відносно батьківського каталогу символьного посилання, а не місця ln
його запуску.
Ви можете зробити:
$ pwd
/home/beau
$ ln -s foo/bar.txt bar.txt
$ readlink -f /home/beau/bar.txt
/home/beau/foo/bar.txt
Або для цього важливо:
$ cd foo
$ ln -s foo/bar.txt ../bar.txt
Важливо усвідомити, що перший аргумент після ln -s
зберігається як ціль симпосилання. Це може бути будь-яка довільна рядок (з єдиними обмеженнями, що вона не може бути порожньою і не може містити символ NUL), але під час використання та вирішення символьної посилання ця рядок розуміється як відносний шлях до батьківський каталог симпосилання (коли він не починається з /
).