Eu posso fazer isso:
$ pwd
/home/beau
$ ln -s /home/beau/foo/bar.txt /home/beau/bar.txt
$ readlink -f bar.txt
/home/beau/foo/bar.txt
Mas eu gostaria de poder fazer isso:
$ pwd
/home/beau
$ cd foo
$ ln -s bar.txt /home/beau/bar.txt
$ readlink -f /home/beau/bar.txt
/home/beau/foo/bar.txt
Isso é possível? De alguma forma, posso resolver o nome do caminho relativo e passá-lo para ln
?
ln -s $(pwd)/bar.txt ~/
ou inclua um script de instalação.ln -s foo/bar.txt /home/beau/bar.txt
Respostas:
Se você criar um link simbólico para um caminho relativo, ele será armazenado como um link simbólico relativo, não absoluto, como mostra o seu exemplo. Isso geralmente é uma coisa boa. Links simbólicos absolutos não funcionam quando o sistema de arquivos está 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 onde
ln
é executado.Você pode fazer:
Ou para esse assunto:
É importante perceber que o primeiro argumento depois
ln -s
é armazenado como o destino do link simbólico. Pode ser qualquer string arbitrária (com as únicas restrições de que não pode estar vazio e não pode conter o caractere NUL), mas no momento em que o link simbólico está sendo usado e resolvido, essa string é entendida como um caminho relativo para o diretório pai do link simbólico (quando não inicia/
).fonte
~
iria funcionar.Se você usa coreutils mais recentes (estou usando coreutils-8.22-11), ele tem uma opção para fazer isso:
pode conter texto arbitrário; se resolvido posteriormente, um link relativo será -r, --relative criar links simbólicos em relação ao local do link
Por exemplo:
fonte
-r
. Usando Mac embora.coreutils
> = 8,16 (fonte: superuser.com/a/837935/403979 )Desculpe, não. Os links simbólicos são relativos ao local em que o link está, não ao local em que você estava quando criou o link. Existem várias boas razões para esse comportamento, a maioria das quais envolve a montagem de sistemas de arquivos remotos.
fonte
Há um pequeno utilitário conveniente chamado
symlinks
(originalmente por Mark Lords, agora mantido por J. Brandt Buckley), presente em muitas distribuições Linux.Para converter todos os links simbólicos absolutos em um diretório para serem relativos:
Infelizmente, não há opção para converter um único link, você deve movê-lo para seu próprio diretório primeiro.
fonte
Você poderia tentar:
Mas, faz um link simbólico com o nome do caminho absoluto. Sua pergunta textual faz menção ao nome do caminho relativo ...
Normalmente, um nome de caminho relativo é o que você deseja e o que
ln -s
oferece. Eu acho que o que você quer é:fonte
À medida que os shells mais comuns expandem os caminhos, para criar um link simbólico relativo, você deve citar o "caminho de origem".
Além disso, o
-s
parâmetro significa--symbolic
.ln
cria links físicos por padrão.fonte
Se você tem certeza de que não há chance de os seus pontos de montagem mudarem, você pode conseguir o que está tentando fazer em um shell bash como este:
Isso pressupõe que você esteja no diretório de destino ao criar o link simbólico.
fonte