cdest un shell intégré. sudone 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.
Mais alors sudo pwdne fonctionnerait pas non plus? (J'ai toujours pensé que le sudo cdfait le travail, mais vous êtes tout simplement pas voir le résultat après les sudoretours. Mais c'était juste une supposition sauvage. Peut - être ni cdne pwdsont en fait intégré dans Bash sur un Mac course. which cdNe 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.)
Arjan le
2
@Arjan: pwdest également un exécutable externe, donc cela fonctionnera. Notez que sur certains systèmes, il existe un cdexécutable, mais il est généralement inutile. Essayez d'utiliser type -a cdc'est beaucoup plus informatif que which, en passant.
Dennis Williamson le
2
Agréable! type -a cdmontre à la fois cd is a shell builtinet cd is /usr/bin/cdsur mon Mac. Et de même pour pwdet echo. Et à la fois sudo pwdet sudo echo "Hello world"ne me donner un résultat. Cependant, type -a returnseuls les rendements return is a shell builtin, et sudo return 3me 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 cdtravail sans erreur? (Ou: quel système d’exploitation utilise le PO.)
Arjan le
sudo sh -c 'cd dirname'ne fait rien pour moi.
Peter Niederwieser
1
@Arjan, j'ai trouvé l'explication: c'est un peu comme un piratage de compatibilité profond. Il ne fait pas sa fonction, mais il est venu des effets secondaires que le réel cda. Et il ne peut rien faire au lieu d’échouer lorsque le shell actuel n’a pas de cdcommande. Toute coquille pouvant être utilisée par des humains l’a cdnotamment /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 cdcommande externe?
Volker Siegel
72
Au lieu de cela, essayez d'utiliser sudo -spour démarrer un shell racine, puis simplement cddans 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!
Mais: faites attention, une fois que vous êtes root ...
Arjan le
7
Vous pouvez simplement sudevenir root et ensuite cdtout 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.
D'autre part, s'il n'y a pas de mot de passe root ou si vous ne le connaissez pas, sudo est la seule option.
Liam
0
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 cdentraî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 cdfonctionne sans erreur, mais ne change pas le répertoire de travail actuel de votre shell actuel.
Sinon, l'exécution sudo cdentraî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.)
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.la source
sudo pwd
ne fonctionnerait pas non plus? (J'ai toujours pensé que lesudo cd
fait le travail, mais vous êtes tout simplement pas voir le résultat après lessudo
retours. Mais c'était juste une supposition sauvage. Peut - être nicd
nepwd
sont en fait intégré dans Bash sur un Mac course.which cd
Ne me donne en effet des résultats. Course à piedsudo 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 uncd
exécutable, mais il est généralement inutile. Essayez d'utilisertype -a cd
c'est beaucoup plus informatif quewhich
, en passant.type -a cd
montre à la foiscd is a shell builtin
etcd is /usr/bin/cd
sur mon Mac. Et de même pourpwd
etecho
. Et à la foissudo pwd
etsudo echo "Hello world"
ne me donner un résultat. Cependant,type -a return
seuls les rendementsreturn is a shell builtin
, etsudo return 3
me montresudo: 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 lecd
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 decd
commande. Toute coquille pouvant être utilisée par des humains l’acd
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 lacd
commande externe?Au lieu de cela, essayez d'utiliser
sudo -s
pour démarrer un shell racine, puis simplementcd
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!
la source
Vous pouvez simplement
su
devenir root et ensuitecd
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.la source
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'erreursudo: cd: command not found
.)Donc,
sudo cd
fonctionne avec erreur.la source