'setx' équivalent dans Ubuntu

8

Windows a une commande powershell appelée setx qui Crée ou modifie des variables d'environnement dans l'utilisateur ou l'environnement système.

Ubuntu a-t-il une commande similaire, c’est-à-dire qu’il n’utilise pas nano ou vi , une seule ligne pour ajouter ou mettre à jour une variable d’environnement au niveau du système.

Solution implémentée

Une ligne à 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
    
posée Ayman 28.11.2017 - 16:01
la source

3 réponses

12

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 voulez ajouter ~/testfolder à votre variable de chemin d'accès, vous pouvez simplement l'entrer dans votre terminal actuel (ceci n'est qu'un exemple):

PATH="$HOME/testfolder:$PATH"

Cela ne changera bien sûr que le temps d’ouverture de la session de terminal. Notez l'utilisation de $ ici, vous la laissez 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 comptent uniquement pour vous ou pour tous les utilisateurs. Une autre option consiste à l'ajouter à votre fichier .profile (uniquement pour vous) 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 en créez de nouveaux (seulement un exemple):

echo "variable=value" >> /path/filename

Si vous souhaitez toutefois modifier un fichier en dehors de votre répertoire utilisateur, ce qui est le cas lorsque vous souhaitez modifier /etc/bash.bashrc , vous devez utiliser sudo et vous ne pouvez donc pas utiliser simplement un document ici, car cela ne fonctionnerait pas , utilisez plutôt une ligne comme ci-dessous:

echo "variable=value" | sudo tee -a /path/filename

Si la variable existe déjà, vous pouvez la modifier avec la commande sed (également un exemple):

sed -i.bak 's/variable=value/variable=new-value/' /path/filename

Cela va modifier la variable dans le fichier mais en créer 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 afin 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 se faire avec sed , il suffit de laisser la seconde partie de la regex vide:

sed -i.bak 's/variable=value//' /path/filename

Si vous êtes intéressé par les variables d’environnement définies, 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 résultats, ( set -o posix ; set ) | less renvoyant le plus grand nombre de variables réellement définies.

    
réponse donnée Videonauth 28.11.2017 - 16:14
la source
10

Il n’ya pas d’équivalent direct de setx /m , mais il existe des moyens d’accomplir ce que setx /m fait.

setx /m met variable=value en HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment . Non / m (c'est-à-dire par utilisateur) setx met simplement le variable=value en HKCU\Environment .

Vous avez spécifiquement demandé "à l'échelle du système". Pour cela, vous ajouteriez la paire variable à /etc/environment OR à /etc/profile.d/<yourfile> . Le premier est évalué par pam, tandis que le second est évalué par /bin/sh . Ainsi, dans /etc/profile.d/<yourfile> , vous ajouteriez variable=value; export variable . (bash permet également export variable=value ). Pour /etc/environment , vous ajouteriez variable=value .

Les équivalents par utilisateur sont ~/.pam_environment et ~/.profile .

Voir aussi: lien

    
réponse donnée Cyrus Patel 28.11.2017 - 20:22
la source
7

Vous pouvez exporter des variables d'environnement sur la ligne de commande, mais cela n'affectera pas l'environnement effectif des processus déjà démarrés, mais uniquement dans le processus en cours et ses sous-processus. Donc, dans la pratique, vous devez souvent vous reconnecter lorsque vous modifiez des variables d'environnement.

    
réponse donnée Gunnar Hjalmarsson 28.11.2017 - 16:19
la source

Lire d'autres questions sur les étiquettes