Символічне посилання та судо


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-скрипт і мені потрібен абсолютний шлях поточного каталогу. З судо я не можу отримати оригінальний каталог.


Чи є ваша мета, щоб pwd повернув фізичний (/ tmp / folder1) шлях або логічний (/ tmp / folder2) шлях для обох?
користувач9517

Мета - повернути логічний шлях при використанні sudo
iDev247

Відповіді:


14

Команда pwd є вбудованою оболонкою та / bin / pwd. За звичайних обставин, вбудований запуск буде надавати перевагу / bin / pwd. Команда PWD можна назвати pwd -Lабо pwd -PЯк і вбудований / бен / PWD по замовчуванням pwd -Lна сторінці людини

-L, --логічне використання PWD з навколишнього середовища, навіть якщо воно містить символьні посилання

тому при запуску pwd ви фактично запускаєте pwd -L, який фактично друкує $ PWD (якщо він існує). Під час запуску sudo pwdsudo надає лише змінні середовища, про які було сказано, що вони передаються через env_keepдирективи. PWD зазвичай не в цьому списку, тому sudo pwd повинен працювати там, де він знаходиться і фактично працює якpwd -P

-П, --фізично уникайте всіх посилань

Спосіб вирішення проблеми - це або використовувати, 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.