Respostas:
Na verdade, um link simbólico armazena o caminho que você fornece literalmente, como uma string¹. Isso significa que seu link ~/mylink
conté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. ln
vê o caminho completo e o armazena em seu link simbólico, que apontará para o lugar certo.
¹ Mais ou menos.
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 .
$PWD
(o caminho que ele usou para chegar lá), e não $(pwd -P)
(o caminho canônico para o diretório atual). Se $PWD
não apontar mais para o diretório atual, também não há como dizer isso $(pwd -P)
no próximo minuto.
"$PWD"
ainda pode ver o valor antigo se o diretório atual for movido. PWD
definido apenas quando você cd
ou inicializa pelo shell.
cd
nã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.
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/directory
apontar para outro lugar.
"$PWD"
em shells POSIX e~0
emzsh
.