Je suis actuellement en train de migrer de la conférence bash vers le poisson et je me suis retrouvé coincé à traduire mes exportations trop importantes. Il semble qu'il existe trois façons de le faire chez Fish pour faire le travail, mais je ne peux pas dire laquelle utiliser, ni s’ils ont des effets secondaires que je ne connais pas.
set -g VAR value
set -x VAR value
set -xg VAR value
Ils ne font sûrement pas tous la même chose. Quelqu'un peut-il expliquer quelles sont les différences et dans quelles situations chacune est appropriée, s'il vous plaît?
set -h
montrera les significations sous les options de portée.Réponses:
Non, ils ne font pas tous la même chose. Le
-x
drapeau est orthogonale aux-g
,-l
et des-u
drapeaux. Le premier définit simplement l'attribut export sur la var. Les trois derniers définissent la portée de la var. Vous pouvez avoir une fonction globale, non exportéeVAR
et intégrée à une fonctionset -lx VAR value
pour créer une instance de portée locale exportée. Lorsque le contrôle revient de la fonction, la portée globaleVAR
réapparaît et elle ne sera pas exportée.Si vous utilisez une version récente (2.7, peut-être 2.6), vous pouvez
set --show VAR
afficher les valeurs dans les trois portées et indiquer si chacune d’elles est exportée.la source
set -g NOT_EXPORTED abc; set -gx EXPORTED def; env | grep EXPORTED
. Notez qu'ilenv
s'agit d'une commande externe qui affiche les variables exportées dont elle a hérité. Il devrait montrer que seule la variable créée viaset -gx
est présente.set -g
?set -g
l'attribut exporté est conservé. Donc, si, par exemple, vous faites quelque chose comme siset -g PATH /dir1 /dir2 $PATH
cela restait exporté parce que c'était dans l'environnement exporté lorsque le poisson a commencé à courir.