Las variables de entorno no son solo para las preferencias del usuario. Son un mecanismo genérico para comunicar una variedad de información de configuración de un proceso primario a procesos secundarios que comienza.
Existen numerosos casos en los que un proceso establecerá variables de entorno específicas para influir solo en los procesos que inicia. Por ejemplo, un script puede restablecer deliberadamente la configuración regional de los comandos que inicia, de modo que pueda analizar la salida de ellos. Los scripts de compilación para muchos paquetes de software grandes utilizan invocaciones anidadas de make
esa coordenada entre sí a través de variables de entorno. Es posible que las herramientas especializadas necesiten cambiar las condiciones de trabajo de otros programas que comienzan haciendo trucos con $ LD_PRELOAD o $ PATH.
Si algo que un usuario hace en una ventana diferente mientras se ejecuta una compilación larga en otra, mágicamente cambiaría las variables de entorno de todos sus procesos a sus espaldas, se produciría locura y caos.
Otras variables de entorno contienen información sobre la sesión particular en la que se inicia un proceso. Los programas esperan que $ TERM describa el conjunto de comandos del terminal particular (o emulador de terminal) al que están conectados; hacer que una configuración general por usuario haga imposible iniciar sesión en el mismo sistema con varios tipos diferentes de terminales. Incluso si solo tiene una pieza de hardware de terminal y nunca inicia sesión de forma remota, los programas screen
dependen de establecer un $ TERM diferente para los procesos que se ejecutan dentro de su sesión.
Una mejor pregunta sería, ¿por qué utilizamos un mecanismo de comunicación de proceso a subproceso para la configuración de preferencias del usuario, en lugar de una base de datos por usuario?
Respuesta: Debido a que funciona bastante bien y los beneficios de hacer una base de datos por usuario no son lo suficientemente grandes que el trabajo de cambiar todo de usar que en lugar de variables de entorno que se haría.
(Puedo pensar en muy pocas configuraciones de preferencias en las que no habría algunos casos de uso en los que sea conveniente cambiarlas solo para ejecutar un solo script, por ejemplo. Por lo tanto, para no perder la funcionalidad, todo aún debería ser reemplazado por variables de entorno, lo que resulta en una mayor complejidad y usuarios más confundidos).
No es que no existan alternativas . Por ejemplo, los recursos X son por sesión de visualización en lugar de por proceso. Pero son difíciles de acceder para los programas de línea de comandos, y los programas de línea de comandos generalmente necesitan trabajar para inicios de sesión remotos que ni siquiera tienen un servidor X para conectarse.