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. 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.
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.)
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.
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.)
sudo sh -c 'cd dirname'non fa niente per me.
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?
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!
Esistono due modi in cui "non funzionerà", a seconda del sistema operativo in uso:
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 )
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.