Un lien symbolique stocke le chemin que vous donnez littéralement, sous forme de chaîne¹. Cela signifie que votre lien ~/mylinkcontient " ." (un caractère). Lorsque vous accédez au lien, ce chemin est interprété par rapport à l'emplacement du lien, plutôt qu'à l'endroit où vous vous trouviez lorsque vous avez créé le lien.
Au lieu de cela, vous pouvez stocker le chemin réel que vous souhaitez dans le lien:
ln -s "$(pwd)"~/mylink
en utilisant la substitution de commandes pour placer la sortie de pwd(le nom du répertoire de travail) dans votre ligne de commande. lnvoit le chemin complet et le stocke dans votre lien symbolique, qui pointera ensuite au bon endroit.
Le premier n'aidera pas nécessairement tous les obus (voir cette réponse ). L'OP veut probablement utiliser $PWD(le chemin qu'il a utilisé pour y arriver), plutôt que $(pwd -P)(le chemin canonique vers le répertoire courant). S'il $PWDne pointe plus vers le répertoire en cours, alors il n'y a pas de dicton qui le $(pwd -P)fera dans la minute suivante non plus.
@ StéphaneChazelas: Vous pouvez voir que vous "$PWD"avez toujours l'ancienne valeur si le répertoire actuel est déplacé. PWDdéfinir uniquement lorsque vous cdou initialiser par le shell.
cuonglm
Mais ce que je dis, c'est que l'OP est aussi susceptible de vouloir l'ancien $ PWD qu'un chemin absolu vers le répertoire de travail actuel et que dans plusieurs shells (ksh93, ash, yash), comme expliqué ilcd n'y a pas de garantie que l' appel $ PWD ou la sortie de pwd un chemin vers le répertoire courant. Vous essayez de vous prémunir contre quelque chose qui ne risque pas de se produire, mais dans la première solution, ce n'est pas nécessairement efficace, et dans la seconde, cela change le comportement.
Stéphane Chazelas
1
Si quelqu'un fait ce mvque vous faites après, vous lnvous retrouvez dans la même situation. D'un autre côté, s'il l'a fait cd /long/logical/path/to/some/directory, vous ne voulez pas que le lien pointe vers /vg0/lv1/user2/app4(le chemin canonique), car le lien pointera au mauvais endroit lorsqu'il /long/logical/path/to/some/directorypointe ailleurs.
"$PWD"
dans les shells POSIX et~0
danszsh
.Tu devrais utiliser:
ou:
pour obtenir le bon résultat pour le répertoire de travail actuel. Il peut être modifié pendant que vous y travailliez comme dans cette question .
la source
$PWD
(le chemin qu'il a utilisé pour y arriver), plutôt que$(pwd -P)
(le chemin canonique vers le répertoire courant). S'il$PWD
ne pointe plus vers le répertoire en cours, alors il n'y a pas de dicton qui le$(pwd -P)
fera dans la minute suivante non plus."$PWD"
avez toujours l'ancienne valeur si le répertoire actuel est déplacé.PWD
définir uniquement lorsque vouscd
ou initialiser par le shell.cd
n'y a pas de garantie que l' appel $ PWD ou la sortie de pwd un chemin vers le répertoire courant. Vous essayez de vous prémunir contre quelque chose qui ne risque pas de se produire, mais dans la première solution, ce n'est pas nécessairement efficace, et dans la seconde, cela change le comportement.mv
que vous faites après, vousln
vous retrouvez dans la même situation. D'un autre côté, s'il l'a faitcd /long/logical/path/to/some/directory
, vous ne voulez pas que le lien pointe vers/vg0/lv1/user2/app4
(le chemin canonique), car le lien pointera au mauvais endroit lorsqu'il/long/logical/path/to/some/directory
pointe ailleurs.