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 su
como observó ... o al cerrar sesión / reiniciar. Podría su
hacerlo 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/*.sh
y /etc/environment
pueda 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/profile
recoger 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/profile
y /etc/profile.d/*.sh
solo 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 bashrc
no 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/profile
o /etc/profile.d/my-custom-env.sh
o ~/.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
Agregar una variable a
/etc/environment
funcionó para mí.Sin embargo, tuve que reiniciar después de cambiar
/etc/environment
para que el cambio surta efecto. Simplemente cerrar y volver a abrir la ventana del terminal no fue suficiente.fuente
source /etc/environment
para recargarlo.