Почему ввод sudo cd, что угодно , не изменит каталог?
Почему ввод sudo cd, что угодно , не изменит каталог?
Ответы:
cdэто встроенная оболочка sudoработает только с исполняемыми файлами. Вы можете сделать это, sudo sh -c 'cd dirname'но как только выйдет оболочка, вы вернетесь в каталог, из которого начали. Если вы говорите, что пытаетесь достичь, я могу помочь вам найти способ сделать это.
sudo pwdтоже не сработает? (Я всегда полагал , что sudo cd делает работу, но вы просто не видите результат после sudoвозвращения. Но это была просто дикая догадка. Может быть , ни , cdни pwdна самом деле встроенный в Bash на Mac. Running which cd ли действительно дает мне результаты. Running sudo cd /не выдает ошибку, но действительно не приводит к изменению рабочего каталога.)
pwdэто также внешний исполняемый файл, поэтому он будет работать. Обратите внимание, что в некоторых системах есть cdисполняемый файл, но он в основном бесполезен. Попробуйте использовать type -a cdэто гораздо более информативно, чем which, кстати.
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. Итак, я предполагаю, что вопрос заключается в следующем: получает ли OP сообщение об ошибке или OP не видит cdработу без каких-либо ошибок? (Или: какую операционную систему использует OP.)
sudo sh -c 'cd dirname'ничего не делает для меня
cdимеет реальное . И он ничего не может сделать вместо того, чтобы потерпеть неудачу, когда текущая оболочка не имеет cdкоманды. Любая оболочка, которая может когда-либо использоваться людьми, имеет cd, в том числе /bin/sh. Но программа, которая, как видно из ядра операционной системы, является оболочкой, может быть намного проще, чем всего несколько строк кода. См. В чем смысл cdвнешней команды?
Вместо этого попробуйте использовать sudo -sдля запуска корневую оболочку, а затем просто cdв каталог.
Когда вы закончите как пользователь root, нажмите CtrlDили введите exit.
Как намекает Арджан в своем комментарии ниже, важно отметить, что, будучи root, можно легко нанести ущерб необходимым компонентам системы. Используйте с осторожностью!
Есть два способа, которыми он не будет работать, в зависимости от вашей ОС:
Если ваша ОС следует POSIX, то запуск sudo cdприведет к выполнению внешней команды "cd" (обычно расположенной в /usr/bin/cd) в разветвленном процессе как пользователь root. Этот процесс успешно меняет каталоги. Как только этот процесс будет завершен, вы вернетесь в свою обычную оболочку, которая все еще находится в каталоге, где она началась.
Так sudo cdработает без ошибок, но не меняет текущий рабочий каталог вашей текущей оболочки.
(ссылка: этот ответ )
В противном случае запуск sudo cdприведет к следующему. Ваш компьютер будет просматривать вашу PATH, пытаясь найти исполняемый файл с именем «cd». Он не найдет ни одного. (существует только встроенная команда оболочки "cd", и это не исполняемый файл). Следовательно, вы получаете ошибку. (В Ubuntu я получаю сообщение об ошибке sudo: cd: command not found.)
Так sudo cdработает с ошибкой.