Я создаю символическую ссылку:
ln -s /tmp/folder1 /tmp/folder2
Затем я иду в / tmp / folder2 и запускаю pwd
:
$ cd /tmp/folder2/
$ pwd
/tmp/folder2
$ sudo pwd
/tmp/folder1 # <-- This is the odd part
Почему pwd
с sudo
дают оригинальный каталог? Я пишу сценарий bash и мне нужен абсолютный путь к текущему каталогу. С sudo я не могу получить оригинальный каталог.
bash
shell
sudo
symbolic-link
iDev247
источник
источник
Ответы:
Команда pwd является встроенной оболочкой и / bin / pwd. При нормальных обстоятельствах встроенная команда будет запускаться с предпочтением / bin / pwd. Команда pwd может быть вызвана как
pwd -L
илиpwd -P
как встроенная и / bin / pwd по умолчаниюpwd -L
со страницы руководствапоэтому, когда вы запускаете pwd, вы фактически запускаете pwd -L, который фактически печатает $ PWD (если он существует). Когда вы запускаете
sudo pwd
, sudo предоставляет только те переменные окружения, которые были переданы черезenv_keep
директивы. Обычно PWD в этом списке нет, поэтому sudo pwd должен работать там, где он есть, и фактически работает какpwd -P
Чтобы решить эту проблему, нужно либо использовать,
pwd -P
если вы постоянно хотите, чтобы физический путь к каталогу, либо (как говорит @Felix) добавить PWD в список переменных среды, чтобы сохранить его с помощью директивы env_keep в sudoersисточник
sudo pwd -L
чтобы получить логический путь.sudo pwd
возвращает физический путь.В Bash
pwd
это встроенный./bin/pwd
дает то же поведение, что иsudo pwd
.Вам захочется
sudo pwd -L
, который работает только если выDefaults env_keep=PWD
в вашsudoers
файлисточник