Manténgase en el mismo directorio de trabajo cuando cambie a sudo

25

Cuando trabajo en la línea de comando, a menudo cambio a sudo usando sudo -i. Sin embargo, mi directorio de trabajo cambia automáticamente a /root. Nunca quiero ir allí; ¡Quiero quedarme donde estaba! ¿Cómo puedo conseguir esto?

Reinstalar a Mónica
fuente

Respuestas:

28

En su sudo -slugar, podría usar , no cambiaría su directorio actual /root, aunque algunas de sus variables de entorno no serían las de la raíz.

Esta página de los foros de Ubuntu tiene un buen resumen:

Summary of the differences found   
                                               corrupted by user's 
                HOME=/root      uses root's PATH     env vars
sudo -i         Y               Y[2]                 N
sudo -s         N               Y[2]                 Y
sudo bash       N               Y[2]                 Y
sudo su         Y               N[1]                 Y

Esta página de la documentación de Ubuntu tiene mucha más información de fondo sobre sudo .

Levon
fuente
1
¡Hermosa! Muchas gracias, simple pero excelente resumen!
Vuelva a instalar a Monica el
@ user1162541 Feliz de poder ayudar.
Levon
sudo -iufunciona para mí ubuntuforums.org/…
rofrol
Durante mi prueba, env vars de sudo -itodavía está dañado por los env env del usuario. La única forma de evitar esto es usarlo su -l.
Simba
5

Si desea usar su, hay una manera de permanecer en el mismo directorio.

su - usuario -c "cd` pwd`; bash "

Que está pasando aqui:

  • su - user = iniciar sesión como user
  • -c lo que significa "ejecutar un comando en el nuevo shell del usuario"
  • -c "cd `pwd`"el comando que damos es cambiar al directorio actual ( `pwd`), pero debido a que usamos las comillas inversas entre comillas dobles, el pwdcomando se evalúa antes de ejecutar el sucomando, de modo que realmente cambiemos al directorio en el que estamos AHORA como el antiguo usuario.

    • Por el contrario, -c 'cd `pwd`'ejecutaría el pwdcomando en el nuevo shell, por lo que esto evaluaría cd /root, lo que, por supuesto, no logrará nada.

    El único problema aquí es que el nuevo shell sale justo después de ejecutar el comando, por lo que agregamos:

  • -c "cd `pwd`; bash"lo que significa "ejecutar bash(nuevo shell) después de ejecutar el cdcomando. El shell bash no se cierra hasta que cerramos la sesión.

Tenga en cuenta que puede reemplazar `pwd`con $(pwd). Funcionalmente son iguales, pero la abundancia de caracteres tipo comillas puede ser difícil de leer.

will.barley
fuente
0

Me he enfrentado al mismo problema y no se me permite ejecutar nada más que sudo su - devuseren el servidor de desarrollo, así que esto es lo que se me ocurrió:

  1. En el perfil del devuser, vuelva al inicio del usuario anterior si se encuentra:
prev_user_home=$(~/bin/home.sh)
if [ -n $prev_user_home ] ; then
        cd $prev_user_home
fi
  1. Un script para determinar un usuario anterior. El script se coloca en el directorio bin del devuser:
#!/bin/bash
#brings you back home after sudo su

function get_owner {
  pid=$1
  echo $(ps ouid -p $pid h | tr -d ' ')
}

pid=$$
my_uid=$(get_owner $pid)
uid=$my_uid
i=0
while [[ $uid == $my_uid && $i -lt 20 ]] ; do
    pid=$(ps -o ppid= $pid)
    uid=$(get_owner $pid)
    i=$((i+1))
done

user_home=$(getent passwd $uid | cut -d ':' -f '6')
if [[ -d $user_home && $uid != 0 ]] ; then
    echo $user_home
fi

Sube un árbol de procesos y comprueba si el usuario propietario del proceso cambió.

reimai
fuente