J'essaie de contenir la portée d'une variable dans un shell, et de ne pas voir les enfants, dans zsh. Par exemple, je tape ceci dans .zshrc:
GREP_OPTIONS=--color=always
Mais si je lance un script shell avec ce qui suit:
#!/bin/bash
echo $GREP_OPTIONS
La sortie est:
--color=always
alors que je veux qu'il soit nul (le script shell ci-dessus ne devrait pas du tout voir la variable GREP_OPTIONS).
En bash, on peut dire:, export -n GREP_OPTIONS=--color=always
ce qui empêchera cela de se produire. Comment puis-je accomplir cela dans zsh?
shell-script
zsh
environment-variables
Oreilles de poney
la source
la source
export -n
juste exporte une variable exportée.Réponses:
export
dans zsh est un raccourci pourtypeset -gx
, où l'attributg
signifie «global» (par opposition à local à une fonction) et l'attributx
signifie «exporté» (c'est-à-dire dans l'environnement). Donc:Cela fonctionne également dans ksh et bash.
Si vous n'exportez jamais
GREP_OPTIONS
en premier lieu, vous n'avez pas besoin de la dé-exporter.Vous pouvez également utiliser la méthode indirecte et portable: la suppression d'une variable la désexporte. Dans ksh / bash / zsh, cela ne fonctionne pas si la variable est en lecture seule.
la source
env -u GREP_OPTIONS your-script
avec quelquesenv
implémentations (n'importe quel shell). Ou(unset GREP_OPTIONS; exec your-script)
export_all
(-a
)? Mais même danstypeset +x GREP_OPTIONS
ce cas, la variable ne serait pas exportée. Si vous ne trouvez pas ce qui ne va pas, essayez la recherche binaire: sauvegardez votre.zshrc
, supprimez la seconde moitié, voyez si le problème persiste, puis ajoutez le troisième trimestre ou réduisez au premier trimestre et répétez.Vous pouvez utiliser une fonction anonyme pour fournir une portée à la variable. De
man zshall
:Mais à part cela - si vous n'utilisez pas du tout
export
dans votre.zshrc
, la variable ne devrait être visible que dans votre session interactive actuelle, et elle ne devrait pas être exportée vers des sous-coquilles.Comme terdon l'a expliqué dans son commentaire:
export -n
en faitbash
juste supprimer la propriété "export" de la variable, donc utiliserexport -n GREP_OPTIONS=--color=always
équivaut à ne pas utiliser du tout l'exportation -GREP_OPTIONS=--color=always
.En d'autres termes, pour obtenir le comportement souhaité, ne l'utilisez pas
export
. Au lieu de cela, dans votre.zshrc
, vous devriez avoirCela rendra la variable disponible pour tous les shells (interactifs, sans connexion) que vous exécutez, tout comme vous le souhaitez, mais elle ne sera pas exportée vers les shells enfants.
la source