Warum funktioniert "sudo cd" nicht?

Antworten:

56

cdist eine eingebaute Shell. sudoFunktioniert nur mit ausführbaren Dateien. Sie können dies tun, sudo sh -c 'cd dirname'aber sobald die Shell beendet ist, kehren Sie zu dem Verzeichnis zurück, von dem Sie gestartet haben. Wenn Sie sagen, was Sie erreichen wollen, kann ich Ihnen dabei helfen, einen Weg zu finden, dies zu erreichen.

Dennis Williamson
quelle
2
Aber sudo pwdwürde das dann auch nicht funktionieren? (Ich habe immer gedacht, dass sudo cd das funktioniert, aber Sie sehen das Ergebnis nach der sudoRückkehr einfach nicht . Aber das war nur eine wilde Vermutung. Vielleicht ist Bash auf einem Mac weder eingebaut cdnoch pwdwirklich eingebaut. Laufen which cd liefert in der Tat Ergebnisse. Laufen sudo cd /gibt mir keinen Fehler, führt aber in der Tat nicht zu einem geänderten Arbeitsverzeichnis.)
Arjan
2
@Arjan: pwdist auch eine externe ausführbare Datei, damit es funktioniert. Beachten Sie, dass auf einigen Systemen eine cdausführbare Datei vorhanden ist , diese jedoch größtenteils unbrauchbar ist. Versuchen Sie type -a cdes mit viel informativer als whichübrigens.
Dennis Williamson
1
Nett! type -a cdzeigt beides cd is a shell builtinund cd is /usr/bin/cdauf meinem Mac. Und ebenfalls für pwdund echo. Und beides sudo pwdund sudo echo "Hello world"gib mir ein Ergebnis. Gibt aber type -a returnnur nach return is a shell builtinund sudo return 3zeigt es mir sudo: return: command not found. Die Frage ist also: Bekommt das OP eine Fehlermeldung oder sieht das OP die cdArbeit nicht fehlerfrei? (Oder: Welches Betriebssystem verwendet das OP?)
Arjan
sudo sh -c 'cd dirname'tut nichts für mich
Peter Niederwieser
1
@Arjan Ich fand die Erklärung: Es ist so etwas wie ein Deep Compatibility Hack. Es macht nicht seine Funktion, aber es ist von den Nebenwirkungen gekommen, die das Reale cdhat. Und es kann nichts tun, anstatt zu scheitern, wenn die aktuelle Shell keinen cdBefehl hat. Jede Hülle, die jemals von Menschen benutzt werden darf, hat cdauch /bin/sh. Aber ein Programm, das vom Betriebssystemkern aus gesehen eine Shell ist, kann viel einfacher sein als das, selbst wenn es nur ein paar Codezeilen sind. Siehe Wozu dient der cdexterne Befehl?
Volker Siegel vor
72

Versuchen Sie stattdessen sudo -smit eine Root-Shell zu starten und dann einfach cdin das Verzeichnis.
Wenn du als root fertig bist, drücke CtrlDoder tippe exit.


Wie Arjan in seinem Kommentar unten anmerkt, ist es wichtig zu beachten, dass man als Root leicht wesentliche Systemkomponenten beschädigen kann. Mit Vorsicht verwenden!

OKTOSITÄT
quelle
4
Aber: seien Sie vorsichtig, wenn einer der Roots ist ...
Arjan
7

Sie können einfach suroot werden und dann cdalles, was Sie wollen ... Ich weiß, eine Antwort wurde bereits akzeptiert, aber wenn eine nicht auf der Liste der Sudoer steht, ist dies die einzige Option.

Alex
quelle
Wenn es andererseits kein Root-Passwort gibt oder Sie es nicht kennen, ist sudo die einzige Option.
Liam