Respostas:
cd
é um shell embutido . Você precisa chamar o shell para executar os recursos internos do shell:
sudo -u USER sh -c 'cd /home/USER'
OU
sudo -u USER bash -c 'cd /home/USER'
cd
não é um comando externo, é apenas um shell embutido, portanto sudo
não pode executá-lo. A razão pela qual cd
existe apenas como um shell embutido é que um processo não pode afetar o diretório atual de outro processo; portanto, um programa que altera o diretório atual e sai imediatamente é inútil. (Quase inútil: um cd
programa retornaria um status que indica se foi bem-sucedido.)
Se você deseja alterar para um diretório e executar comandos como outro usuário, execute um shell que faça tudo isso.
sudo -u SOMEUSER sh -c 'cd /path/to/directory && dosomething'
Eu costumo usar: sudo su - USERNAME
e, em seguida, faça o que você precisa como usuário. Para sair, basta digitarexit
USERNAME
e, em seguida, executar o comando é diferente que a execução direta de comando comoUSERNAME
cd
. OP provavelmente quersudo -i
.