Wie kann ich gleich danach sudo su und das Verzeichnis wechseln?

13

Ich möchte einen Alias ​​erstellen, der ungefähr so ​​funktioniert:

alias userYYY='sudo su userYYY; cd /a/path/that/only/userYYY/has/access'

Von meiner Befehlszeile aus bin ich mit einem Sudo-Benutzer angemeldet und möchte den Alias userYYYso eingeben , dass meine Shell jetzt angemeldet ist userYYYund pwdist /a/path/that/only/userYYY/has/access.

Wie kann ich das machen? Dies userYYYdient zum Ausführen einiger Prozesse, und es muss sich etwas in seiner Heimat befinden. Daher habe ich versucht, sein $ HOME zu ändern, indem ich:

sudo usermod -m -d /a/path/that/only/userYYY/has/access userYYY 

Und dann von meiner Shell mit meiner Sudoer-Datei habe ich getan sudo su userYYY. Aber das hat nicht funktioniert. Das einzige, was funktionierte, war, sudo su -l userYYYYaber das öffnete eine neue Bash in meiner ursprünglichen Shell ( -bash-4.1$ ....).

Zusammenfassend möchte ich einfach vermeiden, dass 2 Zeilen in meine Shell geschrieben werden müssen:

sudo su userYYY
cd /a/path/that/only/userYYY/has/access

Irgendwelche Ideen?

Mariano Martinez Peck
quelle

Antworten:

10
alias userYYY='sudo su userYYY -c "cd /a/path/that/only/userYYY/has/access; /bin/bash"'
Cyrus
quelle
scheint gut zu funktionieren, ist sich aber nicht sicher, wie dieser Fehler behoben werden kann oder ob es sich um ein Problem handelt. mit ubuntu 14.04LTS, bemerkte, dass es ein Problem mit auf debian gab ...bash: cannot set terminal process group (13964): Inappropriate ioctl for device\nbash: no job control in this shell
sonjz
1
tatsächlich, nachdem ich es für eine Weile benutzt hatte, bemerkte ich, dass das Terminal mit dieser Methode ziemlich häufig getötet wird (Trennen ca. 15-30 Minuten, regelmäßig, mein Terminal dauert ca. 6 Stunden vor dem Trennen)
sonjz
Einfach ausgegraben, dieses Verhalten ist auf einen Sicherheitsupdate zurückzuführen: unix.stackexchange.com/questions/65843/…
sonjz
das hat mir geholfen , meine bearbeiten .bashrcDatei sudodann , cdwenn als mit 2 getrennten Linien wurde einfach nicht funktioniert.
RozzA
2

Eine Möglichkeit wäre, den Zielbenutzer zu bearbeiten ~/.bashrcund dort hinzuzufügen cd:

cd /a/path/that/only/userYYY/has/access
ich nehme
quelle
0

Kurze Antwort - das kannst du nicht. Das sudo sustartet eine neue Shell, die beendet werden muss, bevor sie zum cdBefehl gelangt.

John
quelle
0

Für mich eine Kombination aus sudound screenausgearbeitet:

sudo -iu vagrant screen -mS npm_install bash -c 'cd /vagrant && npm install'

Dieser Befehl wechselt zuerst zum vagrantBenutzer. Dann vagrantändert sich das Verzeichnis in /vagrantund wird ausgeführt npm install.

czerasz
quelle
0

Ich weiß, dass dies etwas anders ist als die ursprüngliche Frage, aber die Idee ist, den Befehl als ein anderer Benutzer auszuführen, ohne ein Kennwort einzugeben, wenn die Richtlinie dies verbietet sudo su <user> -c.

sudo -u userYYY -- sh -c "cd /a/path/that/only/userYYY/has/access; /bin/bash"
Chase T.
quelle