Perché "sudo cd" non funziona?


Risposte:


56

cdè una shell incorporata. sudofunziona solo con eseguibili. Si potrebbe fare sudo sh -c 'cd dirname'ma non appena la shell esce, si torna alla directory da cui si è iniziati. Se dici quello che stai cercando di realizzare, allora posso aiutarti a trovare un modo per farlo.


2
Ma allora sudo pwdnon funzionerebbe neanche? (Ho sempre pensato che sudo cd fa il lavoro, ma non sei solo vedere il risultato dopo sudoritorna. Ma questo era solo un ipotesi. Forse non cdne pwdsono in realtà integrata in Bash su un. Con Mac which cd non effettivamente darmi risultati. Correre sudo cd /non mi dà un errore, ma in effetti non risulta in una directory di lavoro modificata.)
Arjan

2
@Arjan: pwdè anche un eseguibile esterno quindi funzionerà. Nota che su alcuni sistemi esiste un cdeseguibile, ma è per lo più inutile. Prova ad usare type -a cdè molto più informativo di which, tra l'altro.
Dennis Williamson,

2
Bello! type -a cdmostra entrambi cd is a shell builtine cd is /usr/bin/cdsul mio Mac. E allo stesso modo per pwde echo. E entrambi sudo pwde sudo echo "Hello world"mi danno un risultato. Tuttavia, type -a returncede solo return is a shell builtine sudo return 3mi mostra sudo: return: command not found. Quindi, suppongo che la domanda sia: l'OP riceve un messaggio di errore o l'OP non vede il cdlavoro senza alcun errore? (Oppure: quale sistema operativo utilizza l'OP.)
Arjan,

sudo sh -c 'cd dirname'non fa niente per me.
Peter Niederwieser,

1
@Arjan Ho trovato la spiegazione: è qualcosa come un hack di compatibilità profonda. Non svolge la sua funzione, ma è derivato dagli effetti collaterali che il reale cdha. E non può fare nulla invece di fallire quando la shell corrente non ha un cdcomando. Qualsiasi guscio che possa mai essere usato dagli umani ha cd, incluso /bin/sh. Ma un programma che è, visto dal kernel del sistema operativo, una shell può essere molto più semplice di così, anche solo un paio di righe di codice. Vedi Qual è il punto del cdcomando esterno?
Volker Siegel,

72

Prova invece a utilizzare sudo -sper avviare una shell di root e quindi semplicemente cdnella directory.
Quando hai finito come root, premi CtrlDo digita exit.


Come Arjan suggerisce nel suo commento qui sotto, è importante notare che come root, si può facilmente danneggiare i componenti di sistema essenziali. Usare con cura!


4
Ma: attenzione, una volta che si è root ...
Arjan,

7

Puoi semplicemente sudiventare root e poi cdtutto quello che vuoi ... So che una risposta è già stata accettata, ma se uno non è nell'elenco dei sudoers, questa è l'unica opzione.


D'altra parte, se non c'è una password di root, o se non la conosci, sudo è l'unica opzione.
Liam,

0

Esistono due modi in cui "non funzionerà", a seconda del sistema operativo in uso:

  1. Se il tuo sistema operativo segue POSIX, l'esecuzione sudo cdin esecuzione farà eseguire il comando esterno "cd" (di solito situato in /usr/bin/cd) in un processo biforcato come utente root. Tale processo modifica correttamente le directory. Una volta terminato il processo, si tornerà alla shell normale, che è ancora nella directory in cui è stata avviata.

    Quindi sudo cdfunziona senza errori, ma non cambia la directory di lavoro corrente della shell corrente.

    (riferimento: questa risposta )

  2. Altrimenti, l'esecuzione sudo cdcauserà quanto segue. Il tuo computer esaminerà il tuo PERCORSO, cercando di trovare un eseguibile chiamato "cd". Non ne troverà uno. ( esiste solo il comando incorporato "cd" della shell e non si tratta di un file eseguibile). Quindi, ricevi un errore. (Su Ubuntu, ricevo il messaggio di errore sudo: cd: command not found.)

    Quindi sudo cdfunziona con errore.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.