¿Cómo puedo sudo su y cambiar el directorio justo después?

13

Me gustaría crear un alias que haga algo como esto:

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

Entonces, desde mi línea de comando, inicié sesión con un usuario de sudo y me gustaría escribir el alias userYYYpara que mi shell ahora esté registrado userYYYy lo pwdesté /a/path/that/only/userYYY/has/access.

¿Cómo puedo hacer eso? Esto userYYYes para ejecutar algunos procesos, y debe haber algo en su hogar. Por lo tanto, intenté cambiar su $ HOME usando:

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

Y luego desde mi shell con mi archivo sudoer lo hice sudo su userYYY. Pero eso no funcionó. Lo único que funcionó fue sudo su -l userYYYYpero eso abrió una nueva fiesta dentro de mi shell original ( -bash-4.1$ ....).

En resumen, lo que quiero es simplemente evitar tener que escribir 2 líneas en mi shell:

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

¿Algunas ideas?

Mariano Martinez Peck
fuente

Respuestas:

10
alias userYYY='sudo su userYYY -c "cd /a/path/that/only/userYYY/has/access; /bin/bash"'
Ciro
fuente
parece funcionar bien, pero no estoy seguro de cómo eliminar este error, o si es un problema. usando ubuntu 14.04LTS, noté que había un problema con debian ...bash: cannot set terminal process group (13964): Inappropriate ioctl for device\nbash: no job control in this shell
sonjz
1
en realidad, después de usarlo por un tiempo, noté que el terminal se mata con bastante frecuencia usando este método (desconectar alrededor de 15-30 min, regularmente, mi terminal dura alrededor de 6 horas antes de desconectar)
sonjz
Solo desenterré esto, este comportamiento se debe a una solución de seguridad: unix.stackexchange.com/questions/65843/…
sonjz
Esto me ha ayudado a editar mi .bashrcarchivo sudo, cddonde tener 2 líneas separadas no funcionaba.
RozzA
2

Una opción sería editar ~/.bashrcel usuario objetivo y agregar cdallí:

cd /a/path/that/only/userYYY/has/access
tomo
fuente
0

Respuesta corta: no puedes. El sudo sucomienza un nuevo shell que debe salir antes de que llegue a la cdorden.

John
fuente
0

Para mí, una combinación de sudoy screenfuncionó:

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

Este comando primero cambia al vagrantusuario. Luego, como vagrantcambia el directorio /vagranty se ejecuta npm install.

czerasz
fuente
0

Sé que esto es ligeramente diferente a la pregunta original, pero la idea es ejecutar el comando como un usuario diferente sin tener que escribir una contraseña cuando la política lo prohíba sudo su <user> -c.

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