Проблема с запуском CD с sudo как другой пользователь


12

Я хочу выполнить команду на оболочке от имени другого пользователя. Команда выглядит следующим образом:

sudo -u USER cd /home/USER

я получил

sudo: cd: command not found

Каков правильный синтаксис команды для передачи в sudo?

Ответы:


14

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

sudo -u USER sh -c 'cd /home/USER'

ИЛИ

sudo -u USER bash -c 'cd /home/USER'

1
Это на самом деле ничего полезного не даст - оболочка закроется сразу после cd. ОП наверное хочет sudo -i.
Дероберт

5

cdэто не внешняя команда, это только встроенная оболочка, поэтому она sudoне может быть выполнена. Причина, по которой cdсуществует только встроенная оболочка, состоит в том, что процесс не может влиять на текущий каталог другого процесса; поэтому программа, которая изменяет текущий каталог и немедленно выходит из него, бесполезна. (Практически бесполезно: cdпрограмма возвращает статус, который указывает, был ли он успешным.)

Если вы хотите перейти в каталог, а затем запускать команды от имени другого пользователя, запустите оболочку, которая делает все это.

sudo -u SOMEUSER sh -c 'cd /path/to/directory && dosomething'

1

Я склонен использовать: sudo su - USERNAMEа затем делать то, что вам нужно, как этот пользователь. Чтобы выйти просто введитеexit


3
вход в систему, а USERNAMEзатем выполнение команды отличается от непосредственного запуска команды какUSERNAME
Pandya
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.