web-dev-qa-db-fra.com

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

Quelqu'un peut-il me dire, s'il vous plaît, quelle est la bonne façon de définir un ensemble de variables environnementales dans la coquille de poisson?

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

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

lorsque je tape à partir de la commande Invite setTESTENV et que je fais un env dans la ligne de commande, je ne vois pas ces informations.

73
cfpete

Les variables que vous déclarez sont conservées dans une portée locale dans votre fonction.

Utilisation:

set -g -x

Ici "g" est pour global.

59
JosEduSol

Utilisez variables universelles

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

set -Ux FOO bar

Utiliser set avec -g ou --global ne définit pas la variable de manière persistante entre les instances de shell

106
Paolo Moretti

Variables d'environnement dans le poisson

J'aimerais ajouter que, bien que la réponse de @ JosEduSol ne soit pas incorrecte et aide à résoudre le problème de l'OP, -g ne définit que la portée comme étant globale, alors que -x entraîne l'exportation de la variable d'environnement spécifiée vers des processus enfants.

La raison de l'échec ci-dessus est due au fait que @cfpete définit les vars env à l'intérieur d'une fonction et que la portée par défaut sera locale pour cette fonction.

9
Jorge Bucaran

une autre option consiste à exécuter:

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

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

cela a l'avantage de garder les variables dans un format supporté par d'autres coques et outils

7
Ophir Yoktan