Différence entre set -g et set -x

0

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?

Travailleur de la 11e heure
la source
La frappe set -hmontrera les significations sous les options de portée.
AFH

Réponses:

3

Non, ils ne font pas tous la même chose. Le -xdrapeau est orthogonale aux -g, -let des -udrapeaux. 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ée VARet intégrée à une fonction set -lx VAR valuepour créer une instance de portée locale exportée. Lorsque le contrôle revient de la fonction, la portée globale VARré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 VARafficher les valeurs dans les trois portées et indiquer si chacune d’elles est exportée.

Kurtis Rader
la source
Désolé, qu'est-ce que cela signifie pour une variable à exporter?
Travailleur de la 11e heure
Une variable exportée est visible pour les commandes exécutées par votre coquille de poisson. Faire set -g NOT_EXPORTED abc; set -gx EXPORTED def; env | grep EXPORTED. Notez qu'il envs'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 via set -gxest présente.
Kurtis Rader
Merci d'avoir expliqué Kurtis. C’est ce que j’ai pensé, mais je ne comprends plus pourquoi je peux voir les variables d’environnement que j’ai définies dans mon config.fish en utilisant set -g?
Travailleur de la 11e heure
Si la variable est déjà exportée, set -gl'attribut exporté est conservé. Donc, si, par exemple, vous faites quelque chose comme si set -g PATH /dir1 /dir2 $PATHcela restait exporté parce que c'était dans l'environnement exporté lorsque le poisson a commencé à courir.
Kurtis Rader
Auparavant, j'avais déjà défini ma variable avec -x à des fins de test et je n'ai pas supprimé cette ligne, espérant qu'elle serait écrasée dans ma prochaine déclaration de ma variable. Merci beaucoup Kurtis! Tout cela a du sens pour moi maintenant :)
Travailleur de la 11e heure