Ich möchte einen Befehl in einer Shell im Namen eines anderen Benutzers ausführen. Der Befehl lautet wie folgt:
sudo -u USER cd /home/USER
Ich bekomme
sudo: cd: command not found
Was ist die richtige Syntax für den an sudo zu übergebenden Befehl?
Antwort1
cd
ist einShell integriert. Sie müssen die Shell aufrufen, um Shell-Builtins auszuführen:
sudo -u USER sh -c 'cd /home/USER'
ODER
sudo -u USER bash -c 'cd /home/USER'
Antwort2
cd
ist kein externer Befehl, sondern nur ein in die Shell integriertes Befehlselement und sudo
kann daher nicht ausgeführt werden. Der Grund, warum cd
es nur als in die Shell integriertes Befehlselement existiert, ist, dass ein Prozess das aktuelle Verzeichnis eines anderen Prozesses nicht beeinflussen kann. Daher ist ein Programm, das das aktuelle Verzeichnis ändert und sofort beendet wird, nutzlos. (Fast nutzlos: Ein cd
Programm würde einen Status zurückgeben, der angibt, ob es erfolgreich war.)
Wenn Sie in ein Verzeichnis wechseln und dann Befehle als ein anderer Benutzer ausführen möchten, führen Sie eine Shell aus, die all diese Aufgaben erledigt.
sudo -u SOMEUSER sh -c 'cd /path/to/directory && dosomething'
Antwort3
Ich verwende normalerweise: sudo su - USERNAME
und mache dann, was du als dieser Benutzer tun musst. Zum Beenden gib einfach einexit