Respostas:
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.
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 $PWDnã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. PWDdefinido apenas quando você cdou inicializa pelo shell.
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.
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.
"$PWD"em shells POSIX e~0emzsh.