Відповіді:
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
.