Warum funktioniert „$ sudo echo 'yo' “, obwohl echo eine in die Shell integrierte Funktion ist?

Warum funktioniert „$ sudo echo 'yo' “, obwohl echo eine in die Shell integrierte Funktion ist?

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 sudofindet man den Befehl, echowenn es keine Shell ist?

Antwort1

Der Grund ist einfach: cdEs handelt sich um ein integriertes Shell-Element (und eine Shell-Funktion in manchen Shells), während echoes 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

sudokann Shell-Builtins nicht verarbeiten, aber Binärdateien in $PATH. Wenn Sie verwenden sudo echo, /bin/echowird in gefunden $PATH, also verwendet es das, während es in sudo cdnicht gefunden werden kann, daher schlägt es fehl.cd$PATH

Antwort2

läuft

 which echo

gibt

 /bin/echo

echoist ein einfaches Programm und sudokann es „finden“.

Nebenbei bemerkt, es muss doch eine Möglichkeit geben,sudoers(5)

Antwort3

Das Problem ist eher ein sudo cdAusfall Ihres Betriebssystems als sudo echoein Erfolg.

sudo cd /directoryist eine recht legitime Methode, um zu prüfen, ob ein bestimmter Benutzer, wahrscheinlich roothier, 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 yoFunktioniert vom Design her, da echoes sowohl durch einen Shell-Alias ​​als auch durch einen ausführbaren Befehl bereitgestellt wird, sudo cd /directoryfunktioniert 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"

verwandte Informationen