Windows a une commande powershell appelée setx
qui crée ou modifie des variables d’environnement dans l’environnement utilisateur ou système.
Est-ce qu'Ubuntu a une commande similaire, c'est-à-dire pas en utilisant nano
ou vi
, une seule ligne pour ajouter ou mettre à jour une variable d'environnement à l'échelle du système.
Une ligne pour ajouter/mettre à jour
grep env_name /etc/environment && sed -i.bak 's/env_name=.*/env_name="env_value"/' /etc/environment || echo 'env_name="env_value"' >> /etc/environment
Vous pouvez le faire simplement en le déclarant comme nouveau dans la ligne de commande ou en le déclarant à nouveau. Par exemple, si vous souhaitez ajouter ~/testfolder
à votre variable de chemin, vous pouvez simplement le saisir dans votre terminal actuel (il ne s'agit que d'un exemple):
PATH="$HOME/testfolder:$PATH"
Cela ne changera bien sûr que le temps que vous avez dit que la session de terminal est ouverte. Notez l'utilisation de $
ici, vous laissez de côté pour la déclaration, mais si vous voulez l'afficher, vous devez ajouter $
pour développer son contenu.
Si vous souhaitez les déclarer plus durables et plus générales, vous pouvez les ajouter dans votre fichier ~/.bashrc
(uniquement pour vous) ou dans /etc/bash.bashrc
(à l'échelle du système), par exemple, si vous souhaitez qu'ils ne comptent que pour vous ou pour tous les utilisateurs. Une autre option consiste à l'ajouter à votre fichier .profile
(uniquement pour vous-même) là où il sera viable à partir du moment où vous vous connectez. Vous pouvez le faire avec echo
par exemple si vous êtes sûr que cette variable n'est pas déjà définie ou si vous créez les nouveaux (seulement un exemple):
echo "variable=value" >> /path/filename
Si vous souhaitez cependant éditer un fichier en dehors de votre répertoire utilisateur, ce qui est le cas lorsque vous voulez éditer /etc/bash.bashrc
, vous devez utiliser Sudo
et vous ne pouvez donc pas simplement utiliser un 'document ici' car cela ne fonctionnerait pas, utilisez plutôt une ligne comme au dessous de:
echo "variable=value" | Sudo tee -a /path/filename
Toutefois, si la variable existe déjà, vous pouvez la modifier à l'aide de la commande sed
(un exemple uniquement):
sed -i.bak 's/variable=value/variable=new-value/' /path/filename
Cela modifiera la variable dans le fichier mais créera une sauvegarde avant la modification. Si vous modifiez des fichiers en dehors de votre répertoire utilisateur avec sed, vous devez utiliser Sudo
dans la plupart des cas pour que la ligne soit:
Sudo sed -i.bak 's/variable=value/variable=new-value/' /path/filename
La suppression d'une variable d'un fichier peut également être effectuée avec sed
name__, laissez simplement la deuxième partie de la regex vide:
sed -i.bak 's/variable=value//' /path/filename
Si les variables d'environnement définies vous intéressent, vous pouvez utiliser la commande env
pour les répertorier, ( set -o posix ; set ) | less
ou sh -c set
. Tous les trois donnent différentes quantités de sortie, avec ( set -o posix ; set ) | less
rendant le plus grand nombre de variables réellement définies.
Il n'y a pas d'équivalent direct de setx /m
, mais il existe des moyens d'accomplir ce que setx /m
fait.
setx /m
met variable=value
dans HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment
. Non-/m (c'est-à-dire par utilisateur) setx
met simplement le variable=value
dans HKCU\Environment
.
Vous avez spécifiquement demandé "tout le système". Pour cela, vous devez ajouter la paire variable-valeur à /etc/environment
OR à /etc/profile.d/<yourfile>
. Le premier est évalué par pam, tandis que le dernier est évalué par /bin/sh
. Ainsi, dans /etc/profile.d/<yourfile>
, vous ajouteriez variable=value; export variable
. (bash autorise également export variable=value
). Pour /etc/environment
vous ajouteriez variable=value
.
Les équivalents par utilisateur sont ~/.pam_environment
et ~/.profile
.
Voir aussi: https://help.ubuntu.com/community/EnvironmentVariables
Vous pouvez exporter des variables d'environnement en ligne de commande, mais cela n'affectera pas l'environnement effectif des processus déjà démarrés, mais uniquement du processus en cours et de ses sous-processus. Donc, dans la pratique, vous devez souvent vous reconnecter lorsque vous modifiez des variables d'environnement.