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