ich verstehe das
sudo cd /directory
wird zurückkehren:
sudo: cd: command not found
weil cd ein Shell-Builtin und kein Binärprogramm ist. Aber warum
sudo echo 'this is a test'
funktioniert gut?
Was ist hier wirklich los? Wie sudo
findet man den Befehl, echo
wenn es keine Shell ist?
Antwort1
Der Grund ist einfach: cd
Es handelt sich um ein integriertes Shell-Element (und eine Shell-Funktion in manchen Shells), während echo
es sich sowohl um eine Binärdatei als auch um ein integriertes Shell-Element handelt:
$ type -a cd
cd is a shell builtin
$ type -a echo
echo is a shell builtin
echo is /bin/echo
sudo
kann Shell-Builtins nicht verarbeiten, aber Binärdateien in $PATH
. Wenn Sie verwenden sudo echo
, /bin/echo
wird in gefunden $PATH
, also verwendet es das, während es in sudo cd
nicht gefunden werden kann, daher schlägt es fehl.cd
$PATH
Antwort2
läuft
which echo
gibt
/bin/echo
echo
ist ein einfaches Programm und sudo
kann es „finden“.
Nebenbei bemerkt, es muss doch eine Möglichkeit geben,sudoers(5)
Antwort3
Das Problem ist eher ein sudo cd
Ausfall Ihres Betriebssystems als sudo echo
ein Erfolg.
sudo cd /directory
ist eine recht legitime Methode, um zu prüfen, ob ein bestimmter Benutzer, wahrscheinlich root
hier, auf ein bestimmtes Verzeichnis zugreifen darf cd
. Das ist der Grund, warum alle Posix-kompatiblen BetriebssystemeTunStellen Sie eine ausführbare Version von bereit cd
.
Die Antwort auf Ihre Frage lautet also: sudo echo yo
Funktioniert vom Design her, da echo
es sowohl durch einen Shell-Alias als auch durch einen ausführbaren Befehl bereitgestellt wird, sudo cd /directory
funktioniert aber nicht, da Ihr Betriebssystem, das wahrscheinlich auf GNU/Linux basiert, kaputt geht.der Posix-Standardin diesem speziellen Fall.
Eine einfache Problemumgehung für Ihr System wäre,sudo sh -c "cd /directory"