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 pwd
avec sudo
donne 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.
bash
shell
sudo
symbolic-link
iDev247
la source
la source
Réponses:
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 -L
oupwd -P
la valeur par défaut intégrée et / bin / pwd àpwd -L
partir de la page de manueldonc 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 desenv_keep
directives. 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
La façon de résoudre le problème consiste à utiliser
pwd -P
si 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 sudoersla source
sudo pwd -L
pour obtenir le chemin logique.sudo pwd
renvoie le chemin physique.En bash,
pwd
est un builtin./bin/pwd
donne le même comportement quesudo pwd
.Vous voudrez
sudo pwd -L
, qui ne fonctionne que si vousDefaults env_keep=PWD
dans votresudoers
dossierla source