Символическая ссылка и sudo


10

Я создаю символическую ссылку:

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 я не могу получить оригинальный каталог.


Ваша цель состоит в том, чтобы pwd возвращал физический (/ tmp / folder1) путь или логический (/ tmp / folder2) путь для обоих?
user9517

Цель - вернуть логический путь при использовании sudo
iDev247

Ответы:


14

Команда pwd является встроенной оболочкой и / bin / pwd. При нормальных обстоятельствах встроенная команда будет запускаться с предпочтением / bin / pwd. Команда pwd может быть вызвана как pwd -Lили pwd -Pкак встроенная и / bin / pwd по умолчанию pwd -Lсо страницы руководства

-L, - логически использовать PWD из окружения, даже если оно содержит символические ссылки

поэтому, когда вы запускаете pwd, вы фактически запускаете pwd -L, который фактически печатает $ PWD (если он существует). Когда вы запускаете sudo pwd, sudo предоставляет только те переменные окружения, которые были переданы через env_keepдирективы. Обычно PWD в этом списке нет, поэтому sudo pwd должен работать там, где он есть, и фактически работает какpwd -P

-P, --physical избегать всех символических ссылок

Чтобы решить эту проблему, нужно либо использовать, pwd -Pесли вы постоянно хотите, чтобы физический путь к каталогу, либо (как говорит @Felix) добавить PWD в список переменных среды, чтобы сохранить его с помощью директивы env_keep в sudoers

env_keep += "PWD"  

Работает! После добавления PWD в env_keep мне нужно сделать, sudo pwd -Lчтобы получить логический путь. sudo pwdвозвращает физический путь.
iDev247

6

В Bash pwdэто встроенный. /bin/pwdдает то же поведение, что и sudo pwd.

Вам захочется

  1. использовать sudo pwd -L, который работает только если вы
  2. включить Defaults env_keep=PWDв ваш sudoersфайл
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.