Wenn ich an der Befehlszeile arbeite, wechsle ich häufig zu sudo using sudo -i
. Mein Arbeitsverzeichnis wechselt jedoch automatisch zu /root
. Ich möchte niemals dorthin gehen. Ich möchte bleiben, wo ich war! Wie kann ich das erreichen?
25
sudo -iu
funktioniert bei mir ubuntuforums.org/…sudo -i
immer noch durch env vars des Benutzers beschädigt. Die einzige Möglichkeit, dies zu vermeiden, ist die Verwendungsu -l
.Wenn Sie verwenden möchten
su
, gibt es eine Möglichkeit, im selben Verzeichnis zu bleiben.Was ist hier los:
su - user
= einloggen alsuser
-c
was bedeutet "einen Befehl in der Shell des neuen Benutzers ausführen"-c "cd `pwd`"
Der Befehl, den wir geben, ist, in das aktuelle Verzeichnis (`pwd`
) zu wechseln. Da wir jedoch die Backticks in doppelten Anführungszeichen verwenden, wird derpwd
Befehl ausgewertet, bevor wir densu
Befehl ausführen , sodass wir tatsächlich in das Verzeichnis wechseln, in dem wir uns JETZT befinden Benutzer.-c 'cd `pwd`'
würde derpwd
Befehl in der neuen Shell ausgeführt, so dass dies ausgewertet würdecd /root
, was natürlich nichts bewirken würde.Das einzige Problem hierbei ist, dass die neue Shell direkt nach dem Ausführen des Befehls beendet wird. Dann fügen wir hinzu:
-c "cd `pwd`; bash"
Das bedeutet "run"bash
(neue Shell) nach dem Ausführen descd
Befehls. Die Bash-Shell wird erst beendet, wenn wir uns abmelden.Beachten Sie, dass Sie ersetzen können
`pwd`
mit$(pwd)
. Sie sind funktionell gleich, aber die Fülle von Anführungszeichen kann schwer zu lesen sein.quelle
Ich habe das gleiche Problem und darf nichts anderes als
sudo su - devuser
auf dem Dev-Server ausführen. Deshalb habe ich mir Folgendes ausgedacht:Es geht einen Prozessbaum hoch und prüft, ob der Benutzer, der den Prozess besitzt, geändert wurde.
quelle