Perché digitare sudo cd qualunque cosa non cambierà la directory?
Perché digitare sudo cd qualunque cosa non cambierà la directory?
Risposte:
cd
è una shell incorporata. sudo
funziona 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.
sudo pwd
non funzionerebbe neanche? (Ho sempre pensato che sudo cd
fa il lavoro, ma non sei solo vedere il risultato dopo sudo
ritorna. Ma questo era solo un ipotesi. Forse non cd
ne pwd
sono 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.)
pwd
è anche un eseguibile esterno quindi funzionerà. Nota che su alcuni sistemi esiste un cd
eseguibile, ma è per lo più inutile. Prova ad usare type -a cd
è molto più informativo di which
, tra l'altro.
type -a cd
mostra entrambi cd is a shell builtin
e cd is /usr/bin/cd
sul mio Mac. E allo stesso modo per pwd
e echo
. E entrambi sudo pwd
e sudo echo "Hello world"
mi danno un risultato. Tuttavia, type -a return
cede solo return is a shell builtin
e sudo return 3
mi 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 cd
lavoro senza alcun errore? (Oppure: quale sistema operativo utilizza l'OP.)
sudo sh -c 'cd dirname'
non fa niente per me.
cd
ha. E non può fare nulla invece di fallire quando la shell corrente non ha un cd
comando. 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 cd
comando esterno?
Prova invece a utilizzare sudo -s
per avviare una shell di root e quindi semplicemente cd
nella 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!
Esistono due modi in cui "non funzionerà", a seconda del sistema operativo in uso:
Se il tuo sistema operativo segue POSIX, l'esecuzione sudo cd
in 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 cd
funziona senza errori, ma non cambia la directory di lavoro corrente della shell corrente.
(riferimento: questa risposta )
Altrimenti, l'esecuzione sudo cd
causerà 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 cd
funziona con errore.