¿Hay alguna forma de ejecutar un comando "como si" estuviera en una nueva sesión de inicio de sesión?
Ya lo he intentado env -i
. Sin embargo, no quiero tratar con varias variables ENV que tengo que configurar o desarmar.
También lo intenté bash -c "some command"
y bash -l -c "some commmand"
, pero todos copian el entorno actual.
Lo más cerca que he llegado es una solución de ghetto: ssh me@localhost "some command"
/bin/bash --login
para obtener ese comportamiento. Lo uso, por ejemplo, para obtener un adecuado$PATH
./bin/bash --l
, que ya probé. Copia el entorno original. Inténtelo:export SOME_VAL=something
. Entonces/bin/bash --login
. Entoncesenv | grep SOME_VAL
. El valor estará ahí.Respuestas:
Aquí hay una respuesta que no requiere privilegios de sudo o la contraseña del usuario, pero que proporciona un entorno como el que obtendría con un inicio de sesión nuevo.
Ejemplo:
Desglosando esto para una explicación:
env -i HOME="$HOME"
: Limpia el medio ambiente. El-i
establece un entorno vacío sin variables de ningún tipo . Esto es problemático porque significa que si intentas ejecutarlo ingenuamentebash -l
, no cargará tu.bash_profile
etc. porqueHOME
no está configurado. Para mitigar esto, pasamos explícitamenteHOME="$HOME"
, creando un entorno dondeHOME
(y soloHOME
) se establece.bash -l -c ...
: Ejecuta el comando deseado en un shell de inicio de sesión. Querrá un shell de inicio de sesión para esto porque estamos comenzando desde un entorno limpio y necesitamos volver a cargar todo.Notablemente:
sudo
versión sí).su
versión sí).ssh
versión sí).fuente
Para algo aún más agresivo
env -i bash
, pero eso desestabiliza todo, incluidos $ HOME y $ TERM.fuente
man sudo
encontrar: "si el usuario objetivo es el mismo que invoca, no se requiere contraseña". (su
Parece que siempre pide una contraseña.) Soy tan tonto por haber pasado por alto algo tan simple en el primer párrafo de unaman
página :( En primer lugar, evité sudo porque supuse que siempre pedía una contraseña. Gracias de nuevo!$USER
que deberá iniciar sesión como root y luegosudo -u ...
como su usuario. Si solo haces losudo -u
que el usuario heredarás.sudo
acceso. ¿Hay algún método alternativo que no requiera sudo?su -l $USER
.ssh $USER@localhost <command>
funciona mejor