Réponses:
cd
est 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'
cd
n'est pas une commande externe, c'est seulement un shell intégré, donc sudo
ne peut pas l'exécuter. La raison pour laquelle cd
existe 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 cd
programme 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'
J'ai tendance à utiliser: sudo su - USERNAME
puis à faire ce dont vous avez besoin en tant qu'utilisateur. Pour quitter il suffit de taperexit
USERNAME
que puis l'exécution de la commande est différente de l'exécution directe de la commande en tant queUSERNAME
cd
. OP veut probablementsudo -i
.