Probleme beim Ausführen von cd mit sudo als einem anderen Benutzer

12

Ich möchte einen Befehl für eine Shell im Auftrag 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 Befehl, der an sudo übergeben wird?

Kaffeebecher
quelle

Antworten:

14

cdist eine eingebaute Shell . Sie müssen die Shell aufrufen, um die eingebauten Shell-Funktionen auszuführen:

sudo -u USER sh -c 'cd /home/USER'

ODER

sudo -u USER bash -c 'cd /home/USER'
kworr
quelle
1
Dies ist nicht wirklich nützlich - die Shell wird direkt nach dem beendet cd. OP will wahrscheinlich sudo -i.
Derobert
5

cdist kein externer Befehl, sondern nur eine eingebaute Shell, sudodie nicht ausgeführt werden kann. Der Grund, warum cdnur eine eingebaute Shell 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, unbrauchbar. (Fast nutzlos: Ein cdProgramm 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 dies alles erledigt.

sudo -u SOMEUSER sh -c 'cd /path/to/directory && dosomething'
Gilles 'SO - hör auf böse zu sein'
quelle
1

Ich benutze sudo su - USERNAMEnormalerweise : und tue dann, was du als dieser Benutzer brauchst. Zum Beenden einfach tippenexit

Algimantas Krasauskas
quelle
3
Die Protokollierung als USERNAMEund die anschließende Ausführung des Befehls unterscheidet sich von der direkten Ausführung des Befehls alsUSERNAME
Pandya