Чому “sudo CD” не працює?


Відповіді:


56

cdє вбудованою оболонкою. sudoпрацює лише з виконуваними файлами. Можна зробити, sudo sh -c 'cd dirname'але як тільки оболонка вийде, ви повернетесь до каталогу, з якого ви почали. Якщо ви скажете, що це ви намагаєтеся досягти, то я можу допомогти вам знайти спосіб це зробити.


2
Але тоді sudo pwdтеж не вийшло? (Я завжди вважав, що sudo cd це працює, але ви просто не бачите результату після sudoповернення. Але це була лише дика здогадка. Можливо, ні, cdні pwdнасправді вбудовані в Bash на Mac. Біг дійсно which cd не дає мені результатів. Біг sudo cd /не дає мені помилок, але насправді не призводить до змінення робочого каталогу.)
Ар'ян,

2
@Arjan: pwdтакож зовнішній виконуваний файл, тому він працюватиме. Зауважте, що в деяких системах є cdвиконуваний файл, але він здебільшого марний. Спробуйте використовувати type -a cdце набагато інформативніше, ніж which, до речі.
Денніс Вільямсон

1
Приємно! type -a cdпоказує cd is a shell builtinі cd is /usr/bin/cdна моєму Mac. І так само для pwdі echo. І як sudo pwdі sudo echo "Hello world"дійсно дають мені результат. Однак type -a returnтільки дає return is a shell builtin, і sudo return 3показує мені sudo: return: command not found. Отже, я гадаю, що питання: чи отримує ОП повідомлення про помилку, чи ОП не бачить cdроботу без помилок? (Або: яку ОС використовує ОП.)
Ар'ян,

sudo sh -c 'cd dirname'нічого не робить для мене.
Пітер Нідервайзер

1
@Arjan Я знайшов пояснення: це щось на кшталт глибокого злому сумісності. Це не виконує свою функцію, але воно дійшло до тих побічних ефектів, які є реальні cd. І він не може нічого не робити замість відмови, коли поточна оболонка не має cdкоманди. Будь-яка оболонка, яка коли-небудь може бути використана людьми cd, в тому числі /bin/sh. Але програма, яка видно з ядра операційної системи, оболонка може бути набагато простішою, ніж ця, навіть лише пара рядків коду. Див. Який сенс cdзовнішньої команди?
Волкер Зігель

72

Замість цього спробуйте використовувати sudo -sдля запуску кореневу оболонку, а потім просто cdу каталог.
Коли ви закінчите як root, натисніть CtrlDабо введіть exit.


Як наголошує Ар'ян у своєму коментарі нижче, важливо зазначити, що як корінь, можна легко завдати шкоди важливим компонентам системи. Використовуйте обережно!


4
Але: будьте обережні, раз один корінь ...
Ар'ян

7

Ви можете просто suстати корінцем, і тоді cdвсе, що ви хочете ... Я знаю, що відповідь вже прийнято, але якщо її немає в списку судорів, то це єдиний варіант.


З іншого боку, якщо кореневого пароля немає, або ви цього не знаєте, sudo - єдиний варіант.
Ліам
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.