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

12

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

sudo -u USER cd /home/USER

я получил

sudo: cd: command not found

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

coffeMug
источник

Ответы:

14

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

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

ИЛИ

sudo -u USER bash -c 'cd /home/USER'
kworr
источник
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