Establecer una variable de entorno global para todos


17

Si configuro una variable en /etc/environment, solo parece aplicarse a los administradores mientras está en sudo su.

¿Cómo puedo hacer que las variables se apliquen a todos? ¿Especialmente cuando están en la terminal? ¿La configuración /etc/enviromentno se aplica a bash?

Respuestas:


13

La /etc/environmentactualización solo funcionará en la próxima sesión, no se vuelve a cargar automáticamente.

Lo que significa que no puede cambiarlo para sesiones que ya han comenzado para otros usuarios.

Si quiere "recargar" lo que sea que esté en el /etc/environmentnecesita el siguiente comando:

source /etc/environment

Pero nuevamente, solo funcionará para su propia sesión actual, otros usuarios no se verán afectados hasta que comiencen una nueva sesión o ejecuten el comando anterior en su propia sesión.


4

TL; DR

Estos archivos de configuración, ya sean globales ( /etc/environment, /etc/profile) o específicos del usuario ( ~/.profile, ~/.bashrc) solo se procesan en el próximo inicio de sesión / sesión.

Los archivos globales se aplican a todos los usuarios (no solo root) ... pero debe reiniciar su sesión de inicio de sesión para ver los cambios reflejados en el entorno. Esto puede suceder al llamar sucomo observó ... o al cerrar sesión / reiniciar. Podría suhacerlo con un usuario no root y vería que también tienen cambios en el entorno.

La razón por la que necesita reiniciar o iniciar sesión nuevamente para obtener el entorno global es porque el entorno se hereda de los procesos principales y el proceso raíz para todo lo demás que ejecuta es su shell de inicio de sesión ... así que si su shell de inicio de sesión no tiene el entorno ... tampoco lo hacen los procesos iniciados dentro del shell de inicio de sesión. Por supuesto, puede configurar / actualizar el entorno para procesos individuales a medida que los inicia, pero tendría que configurar el entorno para el shell de inicio de sesión y reiniciar todos los subprocesos para que vean el cambio.

Ambiente global

Como alguien más ha dicho, es necesario un reinicio o cierre de sesión / inicio de sesión para que los cambios /etc/profile, /etc/profile.d/*.shy /etc/environmentpueda ser recogido.

Esto se debe a que si bien estos archivos especifican el entorno global ... solo se ejecutan una vez al iniciar sesión y, por lo tanto, los inicios de sesión / sesiones existentes no reflejarán los cambios en esos archivos. Un reinicio "restablece" el inicio de sesión de todos, obligándolos a elegir el nuevo entorno.

En su propia sesión de inicio de sesión, puede source /etc/profilerecoger los cambios sin reiniciar o cerrar sesión / iniciar sesión ... pero eso solo afectará su propia sesión y los nuevos procesos que se ejecutan dentro de su sesión.

Tenga en cuenta también que no hay interpolación variable en /etc/environment(no es un script), por lo que no puede hacer cosas como PATH="$PATH:/my/custom/path"allí.

Tenga en cuenta también que /etc/profiley /etc/profile.d/*.shsolo se ejecutan para sesiones de inicio de sesión, por lo que el entorno configurado no estará disponible para las cuentas del sistema que no sean de inicio de sesión (es decir, si está tratando de establecer una variable de entorno para un proceso de demonio que se ejecuta fuera de su shell de inicio de sesión).

Tenga en cuenta que bashrcno es útil para configurar el entorno para todo el shell de inicio de sesión, sino para los shells de bash y los subprocesos ... así que para un verdadero "global" o "usuario global", probablemente desee poner la configuración de su entorno en /etc/profileo /etc/profile.d/my-custom-env.sho ~/.profile. Otros shells (por ejemplo, zsh) también tienen sus propios archivos de configuración, por lo que la configuración del entorno no específico de bash en un bashrc causará problemas o confusión si / cuando cambias de shells (o si otros usuarios del sistema usan diferentes shells).

Es un problema común instalar un nuevo programa y necesita especificar algún entorno para que se ejecute correctamente. El entorno global es una respuesta, pero a menudo requerirá un reinicio que no es ideal para servidores y casos de uso de autoaprovisionamiento / configuración. Debe preguntarse si esta es realmente una variable que todos los usuarios y programas del sistema necesitan o si realmente es algo que necesita poner a disposición de un usuario o programa específico.

Para usuarios específicos

mire la inclusión del entorno en el perfil o bashrc en el directorio de inicio del usuario (por ejemplo ~/.profile ~/.bashrc) dependiendo de si desea esto para interactivos, shells de inicio de sesión, bash-only, etc.

Tenga en cuenta que esto también requiere un reinicio o cierre de sesión / inicio de sesión para que los cambios del entorno estén disponibles para todos los procesos dentro de la sesión de inicio de sesión del usuario. El usuario puede source ~/.profile... pero eso se hace dentro de una terminal y solo actualiza el entorno dentro de esa sesión de terminal y los procesos secundarios ... no necesariamente para todo el entorno de inicio de sesión del usuario.

Para un programa específico hay un par de opciones.

Una es proporcionar el entorno al ejecutar el comando:

VAR_NAME="VAR VALUE" VAR2_NAME="VAR2_VALUE" /path/to/program --opt1 --op2

Si está utilizando systemd, también puede especificar el entorno en el archivo de unidad / servicio [Service]conEnvironment=VAR_NAME="VAR VALUE" VAR2_NAME="VAR2_VALUE

Esta opción puede parecer torpe porque tienes que especificar el entorno cada vez que ejecutas un programa, pero si ese entorno solo es realmente necesario para ese programa ... esta es realmente la mejor manera y debes acostumbrarte a él y no volcar todo en un bashrc o archivo de perfil.

Si no está utilizando systemd o init para configurar el entorno y ejecutar el programa ... entonces, por supuesto, también puede envolver la ejecución del programa con un script bash donde guarde el comando completo, incluida la configuración del entorno para mayor comodidad.

Referencias

También hay una respuesta muy detallada aquí que le sugiero que lea: /ubuntu//a/247769/824160


3

crear un script de shell personalizado en

/etc/profile.d/

agregue sus variables de entorno global dentro de su script creado, reinicie la máquina y luego estará disponible para todos.


Creo que este es un enfoque más confiable que editar el archivo / etc / environment ya que ese archivo puede cambiarse a medida que se actualizan los paquetes.
Phreed

2

Agregar una variable a /etc/environmentfuncionó para mí.

Sin embargo, tuve que reiniciar después de cambiar /etc/environmentpara que el cambio surta efecto. Simplemente cerrar y volver a abrir la ventana del terminal no fue suficiente.


3
Siempre puedes hacer una source /etc/environmentpara recargarlo.
Panthro

Cerrar sesión y volver a iniciarla debería ser suficiente.
Karuhanga
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.