web-dev-qa-db-fra.com

Equivalent `setx` dans Ubuntu

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.

Solution implémentée

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
9
Ayman

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 echopar 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 Sudoet 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 Sudodans 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 sedname__, 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 envpour 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.

12
Videonauth

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

11
Cyrus Patel

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.

7
Gunnar Hjalmarsson