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