Lien symbolique vers le dossier actuel comme chemin absolu sans taper le chemin entier

10

Les liens symboliques sont des raccourcis enregistrés pour les chemins relatifs:

~/foo ln -s . ~/bar/foo
~/foo ls -l ~/bar
total 8
lrwxr-xr-x    1 me  me     1B 15 May 14:38 foo -> .

Le fichier ~/bar/fooest un lien symbolique vers barle répertoire courant de s, c'est-à-dire lui-même

Que faire si je veux créer un lien symbolique dans un autre répertoire vers le répertoire dans lequel je me trouve à ce moment-là? Donc, dans l'exemple ci-dessus, je suis ~/fooet je veux créer ~/bar/fooun lien symbolique vers ~/foo. Bien sûr, mon répertoire actuel peut être un peu plus long que 5 caractères et peut ne pas être si facile à taper.

Gareth
la source

Réponses:

13

Je dirais type

ln -s $PWD ~/bar/

ou

ln -s `pwd` ~/bar/

Vous pouvez également utiliser

ln -s $PWD ~/bar/

mais je suppose que vous le saviez et ce n'est pas ce que vous cherchez. Alors, pourriez-vous mettre à jour votre question pour expliquer quel est votre objectif?

Si le chemin contient des espaces, il serait alors conseillé d'utiliser:

ln -s "$PWD" ~/bar/
Huygens
la source
2
Citez deux fois vos $variables et vos substitutions de commandes, sinon les noms de fichiers avec des espaces gâcheront l'exécution. Vous n'avez pas non plus besoin de la fin $(basename $PWD)(et vous avez oublié un $(et en citant :-))) car c'est de toute façon le nom du lien par défaut.
Daniel Andersson
Je pense que j'étais stupide. J'ai pensé avoir essayé l' pwdapproche et quelque chose s'est mal passé. Mettons cela à une erreur ID-ten-T
Gareth
@DanielAndersson, vous avez raison, il ne prend pas en charge les espaces dans le chemin. Bon point. donc pour mémoire je mettrai à jour la réponse :)
Huygens
4

Absolument:

ln -s "$(readlink -f .)" ~/bar

(peut être bon pour la généralité dans les scripts) ou tout simplement

ln -s ~/foo ~/bar

Relativement:

ln -s ../foo ~/bar

La complétion des onglets vous aidera à taper.


D'après le commentaire de grawity et http://lists.gnu.org/archive/html/coreutils-announce/2012-03/msg00000.html :

* Changements notables dans la version 8.16 (2012-03-26) [stable]

...

lnaccepte désormais l' --relativeoption de générer un lien symbolique relatif vers une cible, quelle que soit la façon dont la cible est spécifiée.

Donc avec cette version:

ln -s --relative . ~/bar

devrait fonctionner (avec en pratique est identique votre premier exemple, avec l'ajout du --relativeswitch).

Daniel Andersson
la source
4
Les derniers coreutils peuvent créer automatiquement des liens symboliques relatifs à l'aide de ln -s -r foo ~/bar.
user1686
@grawity: Intéressant. Pas encore sur mon système, apparemment (Debian Sid).
Daniel Andersson
Il semble avoir été ajouté pour la v8.16 le 22 mars, selon git.
user1686
1
Aussi, quel est l'avantage de $(readlink -f .)plus $PWD?
user1686
2
@grawity: Pas grand-chose. Ils fonctionnent différemment si le répertoire de travail actuel a été atteint par un lien. readlink -fva alors créer un lien symbolique vers le chemin cible absolu du répertoire courant, tandis que $PWDle lien symbolique vers le répertoire littéral dans lequel il se trouve actuellement. Ce qui est recherché est probablement différent de temps en temps, et d'abord et avant tout probablement pas un problème du tout.
Daniel Andersson