comment définir les variables d'environnement dans la coquille de poisson

91

Quelqu'un peut-il me dire quelle est la bonne façon de définir un groupe de variables d'environnement dans la coquille de poisson?

Dans mon fichier .config / fish / config.fish, j'ai une fonction pour configurer mes variables d'environnement comme ceci

function setTESTENV
      set -x BROKER_IP '10.14.16.216'
      set -x USERNAME 'foo'
      set -x USERPASS 'bar'
end 

lorsque je tape à partir de l'invite de commande setTESTENVet que je fais un envdans la ligne de commande, je ne vois pas ces informations.

cfpete
la source

Réponses:

70

Les variables que vous déclarez sont conservées dans une portée locale à l'intérieur de votre fonction.

Utilisation:

set -g -x

Ici " g" est pour global.

JosEduSol
la source
152

Utiliser des variables universelles

Si la variable doit être partagée entre toutes les instances de poisson de l'utilisateur actuel sur l'ordinateur actuel et conservée lors des redémarrages du shell, vous devez utiliser -Uou --universal:

set -Ux FOO bar

Utiliser setavec -gou --globalne définit pas la variable de manière persistante entre les instances de shell


Remarque :

N'ajoutez pas aux variables universelles dans le config.fishfichier, car ces variables deviendront alors plus longues à chaque nouvelle instance de shell. Au lieu de cela, exécutez simplement set -Uxune fois sur la ligne de commande. Et il sera stocké dans le fichier .config/fish/fishd.MACHINE_ID, où se MACHINE_IDtrouve généralement votre adresse MAC.

Paolo Moretti
la source
Mes variables n'ont pas été enregistrées fishd.MACHINE_ID, mais ont été enregistrées dans~/.config/fish/fish_variables
Seanny123
ma variable a été enregistrée ~/.config/fish/fish_variablessur ubuntu 20.04
Igor Markelov
11

une autre option consiste à exécuter:

export (cat env_file.txt |xargs -L 1)

où env_file.txt contient des lignes au format VAR=VALUE

cela a l'avantage de conserver les variables dans un format pris en charge par d'autres shells et outils

Ophir Yoktan
la source
Au cas où vous voudriez éviter les commentaires, vous pouvez: export (grep "^[^#]" .env |xargs -L 1)
Guillermo le
10

Variables d'environnement chez les poissons

Je voudrais ajouter que, bien que la réponse de @ JosEduSol ne soit pas incorrecte et aide à résoudre le problème OP, elle -gne fait que définir la portée pour qu'elle soit globale, tout en -xprovoquant l'exportation de la variable d'environnement spécifiée vers les processus enfants.

La raison pour laquelle ce qui précède échoue, est que @cfpete définit les variables d'environnement dans une fonction et que la portée par défaut sera locale pour cette fonction.

Jorge Bucaran
la source