/etc/environment
est officiellement le bon endroit pour les variables d'environnement système. Mais comment puis-je recharger les assignations dans ce fichier sans redémarrer ou reloguer?
Fait assez intéressant, google ne m'aide pas ici, mis à part les dizaines de billets de blogs suggérant d'utiliser
source /etc/environment
ce qui ne fonctionnera évidemment jamais, car il /etc/environment
s’agit d’une liste d’assigments (une par ligne) et non d’ un script exécutable (d’où les export
commandes manquantes dans /etc/environment
...).
ubuntu
environment-variables
fgysin
la source
la source
for line in $( cat /etc/environment ) ; do export $line ; done
si le format de fichier estkey=value
.export
export
serait nécessaire ... (sans elle, il s'agit simplement d'une non normale -environnement dans le shell actuel, non disponible dans les processus enfants)Réponses:
Une chose que vous vous trompez est qu’il
/etc/environment
faut un redémarrage pour recharger. Ceci est une erreur. La seule fois que le fichier est lu est lors de la connexion , lorsque la pile PAM est activée - en particulierpam_env.so
, qui lit le fichier.La déconnexion et le retour impliqueraient les modifications. En fait, vous devez le faire si vous voulez que tous vos processus reçoivent le nouvel environnement . Toutes les autres "solutions" 2 n'appliqueront l'environnement qu'au processus shell unique, mais pas à tout ce que vous lancez via l'interface graphique, y compris les nouvelles fenêtres de terminal. 1
Si cela vous
export
convient, le manque de commandes peut être compensé avecset -a
etset +a
. Cependant, cela reste un mauvais moyen, car le fichier n’utilise pas non plus les guillemets. Mais cela devrait bien fonctionner:1 GNOME Session Manager permet de modifier son propre environnement, mais uniquement pendant la
Initialization
phase suivante:2
gdb
n'est pas une solution, mais peut être utilisé parfois. Vous devez le joindre aux processus en cours d'exécution de votre gestionnaire de session (par exemplegnome-session
), de votre gestionnaire de fenêtres (par exemplegnome-shell
ouopenbox
), de votre barre des tâches / de votre panneau éventuel (par exemplexfce4-panel
) et généralement de tout autre élément susceptible d'exécuter des commandes. Pour chacun de ces processus, vous devez vous y attachergdb
par PID, appeler laputenv()
fonction à l'aide dep
, puis détacher à l'aide deq
:Notez que le débogueur met en pause le processus. Par conséquent, vous devez vous attacher aux gestionnaires de fenêtres de composition uniquement à partir d'un autre serveur virtuel (console virtuelle) ou via SSH, sinon l'écran se figerait.
En plus de cela, vous devez également mettre à jour l'environnement utilisé par dbus-daemon:
Pour les systèmes plus anciens:
la source
while read
méthode est lue depuisstdin
, vous voulez donc probablement lui appliquer quelque chose (par exemplecat /etc/environment | while ...
). Mais cela ne fonctionnera pas avec les fichiers d'environnement formatés (key="value"
)Ce n'est pas aussi complet que la réponse acceptée, mais si vous avez cité des variables dans vos
/etc/environment
fichiers, les deux méthodes précédentes (qui utilisent d'uneexport $line
manière ou d'une autre) se tromperont et vous obtiendrez des valeurs entre guillemets.sed 's/^/export /' /etc/environment > /tmp/env.sh && source /tmp/env.sh
for
(merci @ tim-jones):for env in $( cat /etc/environment ); do export $(echo $env | sed -e 's/"//g'); done
la source
sed 's/^/export /' /etc/environment
for env in $( cat /etc/environment ); do export $(echo $env | sed -e 's/"//g'); done
set -a; source /etc/environment; set +a;
.