Почему ввод 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
работает с ошибкой.