/etc/environmentes 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/environmentes una lista de asignaciones (una por línea) y no un script ejecutable (de ahí los exportcomandos 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...exportserí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/environmentrequiere 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
exportcomandos se puede compensar conset -ayset +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
Initializationfase:2
gdbno 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-shellOopenbox), 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 adjuntarlogdbmediante 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 readmé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/environmentarchivos, ambos métodos anteriores (que deexport $linealguna manera se usan ) saldrán mal y terminará con los valores citados.sed 's/^/export /' /etc/environment > /tmp/env.sh && source /tmp/env.shfor(gracias @ tim-jones):for env in $( cat /etc/environment ); do export $(echo $env | sed -e 's/"//g'); donefuente
sed 's/^/export /' /etc/environmentfor env in $( cat /etc/environment ); do export $(echo $env | sed -e 's/"//g'); doneset -a; source /etc/environment; set +a;.