Почему «sudo pwd» работает, а «sudo cd» — нет?

Почему «sudo pwd» работает, а «sudo cd» — нет?

Многие ответы StackOverflow предполагают, что это потому, cdчто это встроенная функция, но type cdи та, и type pwdдругая возвращают «shell builtin» и sudo cdвозвращают только «команда не найдена».

Так cdрассматривается ли это как особый случай, вопреки многим ответам на SO, которые « sudoработают только с программами»?

решение1

pwdсуществует как встроенная функция оболочки (поэтому и type pwdвозвращает, что она встроенная в оболочку), так и отдельно какОсновная утилита GNU. Версия, pwdкоторую использует ваша система, этоОсновная утилита GNUверсия. Это исполняемый файл, и поэтому для его запуска можно использовать sudo; в отличие от cdsudo, который является встроенной командой оболочки.

Вы можете убедиться в этом сами.

Введите обе эти команды самостоятельно и посмотрите на результаты. (Если в вашей системе есть несколько версий одной и той же команды, команда whichсообщит вам, какая из них вызывается, когда вы ее введете)

which pwd

which cd

Встроенная оболочка не вернет путь к исполняемому файлу при запуске whichкоманды. Вот примеры вывода обеих команд в моей системе:

nate@linux:~> which pwd  
/usr/bin/pwd


nate@linux:~> which cd
which: no cd in (/home/nate/bin:/usr/local/bin:/usr/bin:/bin:/usr/bin/X11:/usr/games:/usr/lib/mit/bin:/usr/lib/mit/sbin:/home/nate/Scripts:/home/nate/Scripts)

решение2

Где-то есть pwdисполняемый файл (попробуйте whereis pwd) и sudoиспользуйте его.

Связанный контент