Dlaczego „sudo cd” nie działa?

Odpowiedzi:

56

cdjest wbudowaną powłoką. sudodziała tylko z plikami wykonywalnymi. Możesz to zrobić, sudo sh -c 'cd dirname'ale gdy tylko powłoka zostanie zamknięta, nastąpi powrót do katalogu, w którym zacząłeś. Jeśli powiesz, co chcesz osiągnąć, pomogę ci znaleźć sposób, aby to zrobić.

Dennis Williamson
źródło
2
Ale sudo pwdczy też by nie działało? (I zawsze zorientowali, że sudo cd ma pracę, ale nie jesteś tylko widząc wynik po sudozwrotów. Ale to był tylko dzikie przypuszczenie. Może ani cdnie pwdsą w rzeczywistości wbudowane w Basha na Mac. Bieganie which cd jest rzeczywiście mi dać rezultaty. Bieg sudo cd /nie daje mi błędu, ale w rzeczywistości nie powoduje zmiany katalogu roboczego.)
Arjan
2
@Arjan: pwdto także zewnętrzny plik wykonywalny, więc będzie działać. Zauważ, że w niektórych systemach istnieje cdplik wykonywalny, ale w większości jest on bezużyteczny. Nawiasem type -a cdmówiąc, spróbuj użyć o wiele bardziej informacyjnego niż which.
Dennis Williamson,
1
Miły! type -a cdpokazuje zarówno cd is a shell builtini cd is /usr/bin/cdna moim Macu. I podobnie dla pwdi echo. I oba, sudo pwdi sudo echo "Hello world"daj mi wynik. Jednak type -a returntylko daje return is a shell builtini sudo return 3pokazuje mi sudo: return: command not found. Myślę więc, że pytanie brzmi: czy PO wyświetla komunikat o błędzie, czy też PO nie widzi cdpracy bez żadnego błędu? (Lub: jakiego systemu operacyjnego używa OP).
Arjan
sudo sh -c 'cd dirname'nic dla mnie nie robi.
Peter Niederwieser,
1
@Arjan Znalazłem wyjaśnienie: jest to coś w rodzaju głębokiego włamania kompatybilności. Nie spełnia swojej funkcji, ale ma skutki uboczne, które cdma prawdziwy . I nie może nic zrobić zamiast zawieść, gdy bieżąca powłoka nie ma cdpolecenia. Każda powłoka, która może być kiedykolwiek używana przez ludzi cd, w tym /bin/sh. Ale program, który jest widziany z jądra systemu operacyjnego, powłoka może być znacznie prostsza, nawet tylko kilka wierszy kodu. Zobacz Jaki jest sens cdpolecenia zewnętrznego?
Volker Siegel
72

Zamiast tego spróbuj użyć sudo -sdo uruchomienia powłoki roota, a następnie po prostu cddo katalogu.
Gdy skończysz jako root, naciśnij CtrlDlub wpisz exit.


Jak sugeruje Arjan w swoim komentarzu poniżej, ważne jest, aby pamiętać, że jako root można łatwo uszkodzić niezbędne komponenty systemu. Używaj ostrożnie!

oktosiTe
źródło
4
Ale: bądź ostrożny, gdy tylko zrootujesz ...
Arjan
7

Możesz po prostu sustać się rootem, a potem cdwszystko, czego chcesz ... Wiem, że odpowiedź została już zaakceptowana, ale jeśli nie ma jej na liście sudoers, jest to jedyna opcja.

Alex
źródło
Z drugiej strony, jeśli nie ma hasła roota lub go nie znasz, sudo jest jedyną opcją.
Liam,