Me gustaría configurar un par de variables de entorno (en el momento del arranque) en una máquina Ubuntu (10.04), pero quiero crear su valor mediante un script, muy parecido a:
export THE_ENV_VAR=$(script_to_execute_and_use_stdout_from)
- La razón por la que quiero hacer esto es que los comandos utilizados para configurar las variables de entorno tardan mucho en ejecutarse (aproximadamente 10 segundos), por eso solo quiero hacerlo una vez después del arranque. De todos modos, actualmente resolví esto almacenando en caché el resultado del comando en el momento del arranque, de modo que las llamadas posteriores sean rápidas y, por lo tanto, no use env. variables en absoluto.
Intenté configurar /etc/environment
, pero eso solo copia rhs palabra por palabra
Intenté ejecutar un script al /etc/init.d/
inicio, pero no parece funcionar.
¿Ideas?
Respuesta1
Para configurar las variables ambientales de todo el sistema que están disponibles en el arranque, colóquelas en /etc/environment
. Este archivo no es un archivo de script, sino que consta de expresiones de asignación, una por línea. Como esto:
SYSTEM_FOO=barnone
Nota: La expansión de variables no funciona en /etc/environment.
Información original deayuda.ubuntu.com
Respuesta2
Pon eso en ~/.bash_profile
o~/.bashrc
gedit ~/.bashrc
Utilice .bash_profile si necesita utilizar esas variables con shells (scripts) no interactivos y ~/.bashrc si está configurando sus variables en un shell.
Si eso no funciona, necesitamos más detalles, en particular, ¿qué variables está configurando y con qué propósito?
Respuesta3
Si bien esto probablemente no sea una buena práctica, puede especificar variables de entorno como parámetros del kernel. El kernel de Linuxdocumentacióntiene buena información (párrafo importante en negrita):
La lista de argumentos
La línea de comando del kernel se analiza en una lista de cadenas (argumentos de arranque) separadas por espacios. La mayoría de los argumentos de arranque tienen la forma:
name[=value_1][,value_2]...[,value_10]
donde 'nombre' es una palabra clave única que se utiliza para identificar a qué parte del núcleo se deben dar los valores asociados (si los hay). Tenga en cuenta que el límite de 10 es real, ya que el código actual maneja solo 10 parámetros separados por comas por palabra clave. (Sin embargo, puede reutilizar la misma palabra clave con hasta 10 parámetros adicionales en situaciones inusualmente complicadas, suponiendo que la función de configuración lo admita).
La mayor parte de la clasificación está codificada en el archivo fuente del kernel init/main.c. Primero, el kernel verifica si el argumento es alguno de los argumentos especiales 'root=', 'nfsroot=', 'nfsaddrs=', 'ro', 'rw', 'debug' o 'init'. El significado de estos argumentos especiales se describe a continuación.
Luego recorre una lista de funciones de configuración para ver si la cadena de argumento especificada (como 'foo') se ha asociado con una función de configuración ('foo_setup()') para un dispositivo o parte del kernel en particular. Si le pasó al kernel la línea foo=3,4,5,6 entonces el kernel buscará en la matriz bootsetups para ver si 'foo' estaba registrado. Si así fuera, entonces llamaría a la función de configuración asociada con 'foo' (foo_setup()) y le entregaría los argumentos 3, 4, 5 y 6 tal como se indican en la línea de comando del kernel.
Cualquier cosa con el formato 'foo=bar' que no se acepte como función de configuración como se describe anteriormente se interpreta como una variable de entorno que se debe configurar.
Un ejemplo (¿inútil?) sería utilizar 'TERM=vt100' como argumento de arranque.Cualquier argumento restante que no haya sido recogido por el núcleo y que no haya sido interpretado como variable de entorno se pasa al PID 1, que suele ser el programa init(1). El argumento más común que se pasa al proceso de inicio es la palabra 'único' que le indica que inicie la computadora en modo de usuario único y que no inicie todos los demonios habituales. Consulte la página del manual para conocer la versión de init(1) instalada en su sistema para ver qué argumentos acepta.
EsteLa respuesta de AskUbuntu tiene algunas buenas instrucciones sobre cómo modificar los parámetros de arranque del kernel.
Respuesta4
Pon tus comandos en /etc/rc.local
. Asegúrate de leer los comentarios al principio.