cd
é um shell embutido . Você precisa invocar o shell para executar builtins do shell:
sudo -u USER sh -c 'cd /home/USER'
OR
sudo -u USER bash -c 'cd /home/USER'
Eu quero executar um comando em um shell em nome de outro usuário. O comando é o seguinte:
sudo -u USER cd /home/USER
Eu obtenho
sudo: cd: command not found
Qual é a sintaxe correta para o comando passar para o sudo?
cd
é um shell embutido . Você precisa invocar o shell para executar builtins do shell:
sudo -u USER sh -c 'cd /home/USER'
OR
sudo -u USER bash -c 'cd /home/USER'
cd
não é um comando externo, é apenas um shell embutido, então 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 programa cd
retornaria um status que indica se foi bem-sucedido.)
Se você quiser mudar para um diretório e depois 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 depois fazer o que você precisa como usuário. Para sair basta digitar exit
Uma resposta (não recomendada se o acima funcionar):
Login ssh no outro usuário, por
$ ssh USER@localhost
Enter password:
e você pode fazer o que quiser como usuário.
Tags sudo cd-command