Lien symbolique et sudo

10

Je crée un lien symbolique:

ln -s /tmp/folder1 /tmp/folder2

Ensuite, je vais dans / tmp / folder2 et je lance pwd:

$ cd /tmp/folder2/
$ pwd
/tmp/folder2
$ sudo pwd
/tmp/folder1 # <-- This is the odd part

Pourquoi pwdavec sudodonne le répertoire d' origine? J'écris un script bash et j'ai besoin du chemin absolu du répertoire courant. Avec sudo, je n'arrive pas à obtenir le répertoire d'origine.

iDev247
la source
Votre objectif est-il que pwd renvoie le chemin physique (/ tmp / folder1) ou le chemin logique (/ tmp / folder2) pour les deux?
user9517
L'objectif est de renvoyer le chemin logique lors de l'utilisation de sudo
iDev247

Réponses:

14

La commande pwd est à la fois un shell intégré et / bin / pwd. Dans des circonstances normales, la fonction intégrée sera exécutée de préférence à / bin / pwd. La commande pwd peut être appelée en tant que pwd -Lou pwd -Pla valeur par défaut intégrée et / bin / pwd à pwd -Lpartir de la page de manuel

-L, --logical utilise PWD de l'environnement, même s'il contient des liens symboliques

donc lorsque vous exécutez pwd, vous exécutez réellement pwd -L qui, en fait, affiche $ PWD (s'il existe). Lorsque vous exécutez sudo pwd, sudo ne fournit que les variables d'environnement qui doivent passer via des env_keepdirectives. PWD n'est pas normalement dans cette liste, donc sudo pwd doit déterminer où il se trouve et s'exécute en fait commepwd -P

-P, --physical éviter tous les liens symboliques

La façon de résoudre le problème consiste à utiliser pwd -Psi vous souhaitez toujours le chemin du répertoire physique ou (comme @Felix le dit) à ajouter PWD à la liste des variables d'environnement à conserver via une directive env_keep dans sudoers

env_keep += "PWD"  
user9517
la source
Travaux! Après avoir ajouté PWD à env_keep, je dois faire sudo pwd -Lpour obtenir le chemin logique. sudo pwdrenvoie le chemin physique.
iDev247
6

En bash, pwdest un builtin. /bin/pwddonne le même comportement que sudo pwd.

Vous voudrez

  1. utiliser sudo pwd -L, qui ne fonctionne que si vous
  2. inclure Defaults env_keep=PWDdans votre sudoersdossier
Felix Frank
la source