pwd sans liens symboliques

54

Si je le fais, pwdje remarque qu'il utilise tous les liens symboliques que j'ai utilisés pour accéder au répertoire actuel. Puis-je l'obtenir pour me dire le "vrai" répertoire dans lequel je me trouve ... c'est-à-dire le chemin de la racine vers mon répertoire actuel sans utiliser de lien symbolique?

JoelFan
la source

Réponses:

70

Selon la page de manuel POSIX pour pwd, l’ -Poption peut être utile:

-P Le chemin absolu écrit ne doit pas contenir de noms de fichiers qui, dans le contexte du chemin, font référence à des fichiers de type lien symbolique.

Ainsi

$ pwd -P

devrait être ce dont vous avez besoin.

Steven D
la source
Je tiens à souligner que cette information est facilement trouvée en tapant man pwddans shell pour connaître les options de cette commande.
Chud37
7

Le shell intégré à pwd utilise le chemin que le shell garde en mémoire lorsque vous cd(et le stocke $PWD). Cela signifie que si vous avez un lien symbolique vers un chemin complexe (profond), il vous indiquera ce que vous avez tapé pour changer dans ce répertoire au lieu du chemin réel. Ceci est fait pour vous donner ce que vous voulez la plupart du temps.

/bin/pwdutilise l' getcwdappel système (qui de nos jours est un appel de bibliothèque en lecture /proc/self/cwd) qui renvoie le chemin canonique du répertoire en cours, sans tous les traversées de liens symboliques.

Comme Steven D l'a souligné, pwda la -Ppossibilité d'ignorer $PWD. Il a également la -Lpossibilité de retourner le contenu de $PWD. La page de manuel de for pwdne dit pas quelle option est utilisée par défaut, mais l'expérience me dit que la description ci-dessus est correcte (shell pwdvs /bin/pwd). Cependant, vous ne devriez probablement pas compter sur cela et simplement l'utiliser pwd -P.

camh
la source
2
Le comportement que vous décrivez est celui sur les systèmes Linux où /bin/pwdGNU pwdest défini lorsque POSIXLY_CORRECT n'est pas défini. Sur les systèmes POSIX où le pwdest dans /bin. /bin/pwdutilisera $ PWD et peut renvoyer des chemins avec des liens symboliques. GNU pwd se comportera de cette manière POSIX quand il trouvera une variable POSIXLY_CORRECT dans son environnement.
Stéphane Chazelas