Créer un lien symbolique absolu vers le répertoire courant

12

Je suis maintenant sous un répertoire avec un chemin très long. Pour une visite future plus rapide, je voudrais créer un lien vers celui-ci.

j'ai essayé

ln -s . ~/mylink

~/mylinkfait des liens vers ~. Alors, puis-je développer ~le nom de chemin obsolète, puis le donner à ln?

Tim
la source

Réponses:

19

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.

¹ Plus ou moins.

Michael Homer
la source
2
Voir aussi "$PWD"dans les shells POSIX et ~0dans zsh.
Stéphane Chazelas
7

Tu devrais utiliser:

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

ou:

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

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 .

cuonglm
la source
1
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éphane Chazelas
@ StéphaneChazelas: Voir ce unix.stackexchange.com/questions/147693/…
cuonglm
@ 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 mv que 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.
Stéphane Chazelas