Warum funktioniert „sudo pwd“, aber nicht „sudo cd“?

Warum funktioniert „sudo pwd“, aber nicht „sudo cd“?

Viele der StackOverflow-Antworten legen nahe, dass es daran liegt, dass cdes ein integriertes Element ist, aber type cdbeide type pwdgeben „Shell-integriert“ zurück und geben nur sudo cd„Befehl nicht gefunden“ zurück.

Wird das also im Gegensatz zu vielen Antworten auf SO, die besagen, dass es „ nur mit Programmen funktioniert“, cdals Sonderfall behandelt ?sudo

Antwort1

pwdexistiert sowohl als Shell-Builtin (weshalb type pwdes als Shell-Builtin zurückgegeben wird) als auch separat alsGNU Core-DienstprogrammDie Version von, pwddie Ihr System verwendet, ist dieGNU Core-DienstprogrammVersion. Es handelt sich um eine ausführbare Datei und kann daher mit sudo ausgeführt werden; im Gegensatz zu cdist dies ein in die Shell integrierter Befehl.

Sie können dies selbst überprüfen.

Geben Sie beide Befehle selbst ein und beobachten Sie die Ergebnisse. (Wenn in Ihrem System mehrere Versionen desselben Befehls vorhanden sind, whichwird Ihnen beim Eingeben des Befehls mitgeteilt, welche Version aufgerufen wird.)

which pwd

which cd

Ein Shell-Builtin gibt keinen Ordnerpfad zu einer ausführbaren Datei zurück, wenn Sie den whichBefehl ausführen. Hier sind Beispielausgaben beider Befehle auf meinem System:

nate@linux:~> which pwd  
/usr/bin/pwd


nate@linux:~> which cd
which: no cd in (/home/nate/bin:/usr/local/bin:/usr/bin:/bin:/usr/bin/X11:/usr/games:/usr/lib/mit/bin:/usr/lib/mit/sbin:/home/nate/Scripts:/home/nate/Scripts)

Antwort2

Es gibt pwdirgendwo eine ausführbare Datei (try whereis pwd) und sudoverwendet diese.

verwandte Informationen