Ответы:
cd
является встроенной в командный интерпретатор . Вам необходимо вызвать оболочку для выполнения встроенных команд оболочки:
sudo -u USER sh -c 'cd /home/USER'
ИЛИ
sudo -u USER bash -c 'cd /home/USER'
cd
это не внешняя команда, это только встроенная оболочка, поэтому она sudo
не может быть выполнена. Причина, по которой cd
существует только встроенная оболочка, состоит в том, что процесс не может влиять на текущий каталог другого процесса; поэтому программа, которая изменяет текущий каталог и немедленно выходит из него, бесполезна. (Практически бесполезно: cd
программа возвращает статус, который указывает, был ли он успешным.)
Если вы хотите перейти в каталог, а затем запускать команды от имени другого пользователя, запустите оболочку, которая делает все это.
sudo -u SOMEUSER sh -c 'cd /path/to/directory && dosomething'
Я склонен использовать: sudo su - USERNAME
а затем делать то, что вам нужно, как этот пользователь. Чтобы выйти просто введитеexit
USERNAME
затем выполнение команды отличается от непосредственного запуска команды какUSERNAME
cd
. ОП наверное хочетsudo -i
.