Se você criar um link simbólico para um caminho relativo, ele será armazenado como um link simbólico relativo, não absoluto, como seu exemplo mostra. Isso geralmente é uma coisa boa. Links simbólicos absolutos não funcionam quando o sistema de arquivos é montado em outro lugar.
O motivo pelo qual seu exemplo não funciona é que ele é relativo ao diretório pai do link simbólico e não ao local em que ln
é executado.
Você pode fazer:
$ pwd
/home/beau
$ ln -s foo/bar.txt bar.txt
$ readlink -f /home/beau/bar.txt
/home/beau/foo/bar.txt
Ou para isso:
$ cd foo
$ ln -s foo/bar.txt ../bar.txt
É importante perceber que o primeiro argumento após ln -s
é armazenado como o destino do symlink. Pode ser qualquer string arbitrária (com as únicas restrições que não pode ser vazia e não pode conter o caracter NUL), mas no momento em que o symlink está sendo usado e resolvido, essa string é entendida como um caminho relativo para o diretório pai do symlink (quando não começa com /
).