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.
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é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 mvdepois 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~0
emzsh
.Você deveria usar:
ou:
para obter o resultado certo para o diretório de trabalho atual. Pode ser alterado enquanto você estava trabalhando nele, como nesta pergunta .
fonte
$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ê fazln
, então você acaba na mesma situação. Por outro lado, se ele o fezcd /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.