web-dev-qa-db-fra.com

Comment définir une variable d'environnement au démarrage (via un script)?

J'aimerais définir quelques variables d'environnement (au démarrage) sur une machine Ubuntu (10.04), mais je veux créer leur valeur via un script, un peu comme:

export THE_ENV_VAR=$(script_to_execute_and_use_stdout_from)
  • La raison pour laquelle je veux faire cela est que les commandes utilisées pour définir les variables d'environnement prennent beaucoup de temps à s'exécuter (environ 10 secondes), c'est pourquoi je ne veux le faire qu'une fois après le démarrage. Quoi qu'il en soit, pour le moment, j'ai résolu ce problème en mettant en cache le résultat de la commande au démarrage, de sorte que les appels suivants iraient vite, sans utiliser env. variables du tout.

J'ai essayé de mettre en /etc/environment, mais cela ne copie que rhs verbatim

J'ai essayé d'exécuter un script dans /etc/init.d/ au démarrage, mais cela ne semble pas fonctionner.

Des idées?

5
Robert

Mettez cela dans ~/.bash_profile ou ~/.bashrc

gedit ~/.bashrc

Utilisez .bash_profile si vous devez utiliser ces variables avec des shells non interactifs (scripts) et ~/.bashrc si vous définissez vos variables dans un shell.

Si cela ne fonctionne pas, nous avons besoin de plus de détails, en particulier quelles variables définissez-vous et dans quel but?

3
Panther

Bien que cela ne soit probablement pas une bonne pratique, vous pouvez spécifier des variables d’environnement en tant que paramètres de noyau. Le noyau Linux documentation contient de bonnes informations (paragraphe important en gras):

La liste d'arguments

La ligne de commande du noyau est analysée dans une liste de chaînes (arguments de démarrage) séparées par des espaces. La plupart des arguments de démarrage ont la forme suivante:

 name[=value_1][,value_2]...[,value_10]

où 'nom' est un mot clé unique utilisé pour identifier à quelle partie du noyau les valeurs associées (le cas échéant) doivent être attribuées. Notez que la limite de 10 est réelle, car le code actuel ne traite que 10 paramètres séparés par une virgule par mot clé. (Cependant, vous pouvez réutiliser le même mot-clé avec 10 paramètres supplémentaires dans des situations inhabituellement compliquées,> en supposant que la fonction de configuration le prenne en charge.)

La majeure partie du tri est codée dans le fichier source du noyau init/main.c. Premièrement, le noyau vérifie si l'argument est l'un des arguments spéciaux 'root =', 'nfsroot =', 'nfsaddrs =', 'ro', 'rw', 'debug' ou 'init'. La signification de ces arguments spéciaux est décrite ci-dessous.

Ensuite, il parcourt une liste de fonctions d’installation pour voir si la chaîne d’argument spécifiée (telle que "foo") a été associée à une fonction d’installation ("foo_setup ()") pour un périphérique particulier ou une partie du noyau. Si vous transmettez au noyau la ligne foo = 3,4,5,6, il cherchera dans le tableau bootsetups pour voir si 'foo' a été enregistré. Si c'était le cas, la fonction de configuration associée à 'foo' (foo_setup ()) serait alors appelée et les arguments 3, 4, 5 et 6 lui seraient transmis, comme indiqué sur la ligne de commande du noyau.

Tout élément de la forme 'foo = bar' qui n'est pas accepté en tant que fonction de configuration telle que décrite ci-dessus est alors interprété comme une variable d'environnement à définir.
Un exemple (inutile?) Consisterait à utiliser 'TERM = vt100' comme argument de démarrage.

Tous les arguments restants qui n'ont pas été repris par le noyau et qui n'ont pas été interprétés comme des variables d'environnement sont ensuite transmis au PID 1, qui est généralement le programme init (1). L'argument le plus courant transmis au processus init est le mot 'single' qui lui demande de démarrer l'ordinateur en mode utilisateur unique et de ne pas lancer tous les démons habituels. Consultez la page de manuel de la version de init (1) installée sur votre système pour voir quels arguments elle accepte.

This AskUbuntu answer a de bonnes instructions pour modifier les paramètres de démarrage du noyau.

1
wheeler

Pour définir les variables d'environnement disponibles au démarrage à l'échelle du système, placez-les dans /etc/environment. Ce fichier n'est pas un fichier de script, mais se compose d'expressions d'affectation, une par ligne. Comme ça:

SYSTEM_FOO=barnone

Remarque : Le développement de variable ne fonctionne pas dans/etc/environment.

Informations originales de help.ubuntu.com

0
frederickjh