Problème avec l'exécution de cd avec sudo en tant qu'autre utilisateur

12

Je veux exécuter une commande sur un shell au nom d'un autre utilisateur. La commande est la suivante:

sudo -u USER cd /home/USER

Je reçois

sudo: cd: command not found

Quelle est la syntaxe correcte pour que la commande passe à sudo?

coffeMug
la source

Réponses:

14

cdest un shell intégré . Vous devez appeler le shell pour exécuter les commandes internes du shell:

sudo -u USER sh -c 'cd /home/USER'

OU

sudo -u USER bash -c 'cd /home/USER'
kworr
la source
1
Cela ne fera rien d'utile --- le shell sortira juste après le cd. OP veut probablement sudo -i.
derobert
5

cdn'est pas une commande externe, c'est seulement un shell intégré, donc sudone peut pas l'exécuter. La raison pour laquelle cdexiste uniquement en tant que shell intégré est qu'un processus ne peut pas affecter le répertoire courant d'un autre processus; par conséquent, un programme qui change le répertoire courant et se ferme immédiatement est inutile. (Presque inutile: un cdprogramme retournerait un statut qui indique s'il a réussi.)

Si vous souhaitez passer à un répertoire, puis exécuter des commandes en tant qu’autre utilisateur, exécutez un shell qui fait tout cela.

sudo -u SOMEUSER sh -c 'cd /path/to/directory && dosomething'
Gilles 'SO- arrête d'être méchant'
la source
1

J'ai tendance à utiliser: sudo su - USERNAMEpuis à faire ce dont vous avez besoin en tant qu'utilisateur. Pour quitter il suffit de taperexit

Algimantas Krasauskas
la source
3
la journalisation en tant USERNAMEque puis l'exécution de la commande est différente de l'exécution directe de la commande en tant queUSERNAME
Pandya