/etc/environment
es oficialmente el lugar correcto para las variables de entorno de todo el sistema. Pero, ¿cómo puedo volver a cargar las asignaciones en este archivo sin reiniciar o volver a iniciar sesión?
Curiosamente, google no me ayuda aquí, aparte de las docenas de publicaciones de blog que sugieren usar
source /etc/environment
que obviamente nunca funcionará porque /etc/environment
es una lista de asignaciones (una por línea) y no un script ejecutable (de ahí los export
comandos que faltan en /etc/environment
...).
ubuntu
environment-variables
fgysin
fuente
fuente
for line in $( cat /etc/environment ) ; do export $line ; done
, si el formato de archivo eskey=value
.export
...export
sería necesaria ... (sin ella, es simplemente un no normal -ambiente variable en el shell actual, no disponible en procesos secundarios)Respuestas:
Una cosa con la que se equivoca es que
/etc/environment
requiere un reinicio para volver a cargar. Esto es incorrecto. La única vez que se lee el archivo es al iniciar sesión , cuando se activa la pila PAM, específicamentepam_env.so
, que lee el archivo.Cerrar sesión y volver a iniciarla aplicaría los cambios, y de hecho debe hacerlo si desea que todos sus procesos reciban el nuevo entorno . Todas las demás "soluciones" 2 solo aplicarán el entorno al proceso de shell único, pero no a todo lo que inicie a través de la GUI, incluidas las nuevas ventanas de terminal. 1
Sin embargo, si está de acuerdo con eso, la falta de
export
comandos se puede compensar conset -a
yset +a
. Sin embargo, sigue siendo un mal camino, ya que el archivo tampoco usa comillas. Pero esto debería funcionar bien:1 GNOME Session Manager proporciona una forma de cambiar su propio entorno, pero solo durante la
Initialization
fase:2
gdb
no es una solución, pero puede usarse a veces. Debe adjuntarlo a los procesos en ejecución de su administrador de sesión (pgnome-session
. Ej. ), Su administrador de ventanas (p. Ej.gnome-shell
Oopenbox
), su barra de tareas / panel si corresponde (pxfce4-panel
. Ej. ) Y, en general, cualquier otra cosa que pueda ejecutar cosas. Para cada uno de esos procesos, debe adjuntarlogdb
mediante PID, invocar laputenv()
función usandop
, luego desconectar usandoq
:Tenga en cuenta que el depurador detiene el proceso, por lo tanto, debe adjuntar a los administradores de ventanas de composición solo desde otro tty (consola virtual) o sobre SSH; de lo contrario, la pantalla se congelaría.
Además de eso, también debe actualizar el entorno utilizado por dbus-daemon:
Para sistemas más antiguos:
fuente
while read
método leestdin
, por lo que probablemente desee canalizarle algo (pcat /etc/environment | while ...
. Ej .). Pero esto no funcionará con archivos de entorno con formato de cotización (key="value"
)Esto no es tan completo como la respuesta aceptada, pero si ha citado variables en sus
/etc/environment
archivos, ambos métodos anteriores (que deexport $line
alguna manera se usan ) saldrán mal y terminará con los valores citados.sed 's/^/export /' /etc/environment > /tmp/env.sh && source /tmp/env.sh
for
(gracias @ tim-jones):for env in $( cat /etc/environment ); do export $(echo $env | sed -e 's/"//g'); done
fuente
sed 's/^/export /' /etc/environment
for env in $( cat /etc/environment ); do export $(echo $env | sed -e 's/"//g'); done
set -a; source /etc/environment; set +a;
.