Pourquoi taper sudo cd ne changera pas le répertoire?
Pourquoi taper sudo cd ne changera pas le répertoire?
Réponses:
cd
est un shell intégré. sudo
ne fonctionne qu'avec les exécutables. Vous pouvez le faire, sudo sh -c 'cd dirname'
mais dès que le shell se ferme, vous revenez au répertoire de départ. Si vous dites ce que vous essayez d'accomplir, je peux vous aider à trouver un moyen de le faire.
sudo pwd
ne fonctionnerait pas non plus? (J'ai toujours pensé que le sudo cd
fait le travail, mais vous êtes tout simplement pas voir le résultat après les sudo
retours. Mais c'était juste une supposition sauvage. Peut - être ni cd
ne pwd
sont en fait intégré dans Bash sur un Mac course. which cd
Ne me donne en effet des résultats. Course à pied sudo cd /
ne me donne pas d'erreur, mais n'entraîne effectivement pas de modification du répertoire de travail.)
pwd
est également un exécutable externe, donc cela fonctionnera. Notez que sur certains systèmes, il existe un cd
exécutable, mais il est généralement inutile. Essayez d'utiliser type -a cd
c'est beaucoup plus informatif que which
, en passant.
type -a cd
montre à la fois cd is a shell builtin
et cd is /usr/bin/cd
sur mon Mac. Et de même pour pwd
et echo
. Et à la fois sudo pwd
et sudo echo "Hello world"
ne me donner un résultat. Cependant, type -a return
seuls les rendements return is a shell builtin
, et sudo return 3
me montre sudo: return: command not found
. Donc, je suppose que la question est la suivante: l’opérateur reçoit-il un message d’erreur ou ne voit-il pas le cd
travail sans erreur? (Ou: quel système d’exploitation utilise le PO.)
sudo sh -c 'cd dirname'
ne fait rien pour moi.
cd
a. Et il ne peut rien faire au lieu d’échouer lorsque le shell actuel n’a pas de cd
commande. Toute coquille pouvant être utilisée par des humains l’a cd
notamment /bin/sh
. Mais un programme qui, vu depuis le noyau du système d’exploitation, est un shell peut être beaucoup plus simple, même avec seulement quelques lignes de code. Voir Quel est le point de la cd
commande externe?
Au lieu de cela, essayez d'utiliser sudo -s
pour démarrer un shell racine, puis simplement cd
dans le répertoire.
Lorsque vous avez terminé en tant que root, appuyez sur CtrlDou tapez exit
.
Comme Arjan l'indique dans son commentaire ci-dessous, il est important de noter qu'en tant que root, on peut facilement endommager les composants essentiels du système. A utiliser avec précaution!
Vous pouvez simplement su
devenir root et ensuite cd
tout ce que vous voulez ... Je sais qu'une réponse a déjà été acceptée, mais si elle ne figure pas sur la liste des sudoers, c'est la seule option.
Selon votre système d'exploitation, cela "ne fonctionnera pas" de deux manières:
Si votre système d'exploitation suit POSIX, l'exécution sudo cd
entraînera l' exécution de la commande externe "cd" (située généralement sur /usr/bin/cd
) dans un processus créé en tant qu'utilisateur root. Ce processus change les répertoires avec succès. Une fois ce processus terminé, vous serez renvoyé à votre shell habituel, qui se trouve toujours dans le répertoire où il a commencé.
Donc sudo cd
fonctionne sans erreur, mais ne change pas le répertoire de travail actuel de votre shell actuel.
(référence: cette réponse )
Sinon, l'exécution sudo cd
entraînera ce qui suit. Votre ordinateur recherchera dans votre PATH un exécutable nommé "cd". Il n'en trouvera pas un. (Seule la commande intégrée "cd" du shell existe et il ne s'agit pas d'un fichier exécutable). Par conséquent, vous obtenez une erreur. (Sur Ubuntu, je reçois le message d'erreur sudo: cd: command not found
.)
Donc, sudo cd
fonctionne avec erreur.