Crie um link simbólico absoluto para o diretório atual


12

Agora estou em um diretório com caminho muito longo. Para futuras visitas mais rápidas, gostaria de criar um link para ele.

eu tentei

ln -s . ~/mylink

~/mylinkna verdade, links para ~. Então, posso expandir ~para o nome do caminho obsoleto e depois atribuí-lo ln?

Respostas:


19

Na verdade, um link simbólico armazena o caminho que você fornece literalmente, como uma string¹. Isso significa que seu link ~/mylinkcontém " ." (um caractere). Quando você acessa o link, esse caminho é interpretado em relação ao local onde está o link, e não onde você estava quando criou o link.

Em vez disso, você pode armazenar o caminho real que deseja no link:

ln -s "$(pwd)" ~/mylink

usando substituição de comando para colocar a saída de pwd(o nome do diretório de trabalho) em sua linha de comandos. lnvê o caminho completo e o armazena em seu link simbólico, que apontará para o lugar certo.

¹ Mais ou menos.


2
Veja também "$PWD"em shells POSIX e ~0em zsh.
Stéphane Chazelas 01/08/14

7

Você deveria usar:

ln -s "$(cd . && pwd)" ~/mylink

ou:

ln -s "$(pwd -P)" ~/mylink

para obter o resultado certo para o diretório de trabalho atual. Pode ser alterado enquanto você estava trabalhando nele, como nesta pergunta .


1
O primeiro não necessariamente ajudará em todas as conchas (veja esta resposta ). O OP provavelmente deseja usar $PWD(o caminho que ele usou para chegar lá), e não $(pwd -P)(o caminho canônico para o diretório atual). Se $PWDnão apontar mais para o diretório atual, também não há como dizer isso $(pwd -P)no próximo minuto.
Stéphane Chazelas


@ StéphaneChazelas: Você "$PWD"ainda pode ver o valor antigo se o diretório atual for movido. PWDdefinido apenas quando você cdou inicializa pelo shell.
precisa saber é o seguinte

Mas o que estou dizendo é que é provável que o OP deseje o antigo $ PWD do que algum caminho absoluto para o diretório de trabalho atual e que, em vários shells (ksh93, ash, yash), conforme explicado , a chamada cdnão é garantida $ PWD ou a saída de pwd um caminho para o diretório atual. Você está tentando se proteger contra algo que provavelmente não acontecerá, mas na primeira solução, isso não é necessariamente eficaz e, na segunda, está mudando o comportamento.
Stéphane Chazelas

1
Se alguém faz o mv depois que você faz ln, então você acaba na mesma situação. Por outro lado, se ele o fez cd /long/logical/path/to/some/directory, você não deseja que o link aponte para /vg0/lv1/user2/app4(o caminho canônico), pois o link apontará para o lugar errado quando /long/logical/path/to/some/directoryapontar para outro lugar.
Stéphane Chazelas
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.