/ / Comment conserver les fonctions / variables locales sur mon zshrc? - zsh, zshrc

Comment conserver les fonctions / variables locales sur mon zshrc? - zsh, zshrc

Toute variable que je déclare dans mon zshrc est disponible dans le shell en tant que variable d'environnement. Je ne veux pas que cela se produise.

J'ai essayé de mettre les variables dans une fonction et de les définir comme locales, mais alors la fonction est disponible en dehors du zshrc.

Comment puis-je le faire ce qui se passe dans mon zshrc reste dans mon zshrc?

Réponses:

16 pour la réponse № 1

Ils sont disponibles, mais ils ne sont pas exportés, donc les scripts lancés à partir de la ligne de commande ne reçoivent pas ces variables. Si ton .zshrc ressemble à

function zshrc()
{
local VAR=1
# Do stuff
}
zshrc

et vous ne voulez alors jamais lancer zshrc fonctionne à nouveau, vous pouvez simplement faire

unfunction zshrc

ensuite.


28 pour la réponse № 2

Si vous utilisez une version récente de zsh, vous pouvez utiliser une fonction anonyme:

function () {
local xyz=abc
# whatever
}

La fonction sera automatiquement exécutée puis jetée, elle existe uniquement à des fins de portée.

Cela fonctionne pour n'importe quel fichier source, pas seulement zshrc.


5 pour la réponse № 3

Si vous n’ajoutez pas le mot local à une variable, elle restera jusqu'à ce que vous effectuiez l'une des opérations suivantes:

  1. Ouvrez une nouvelle fenêtre de terminal.
  2. Courir exec zsh ou exec bash en fonction de votre coquille. Ceci efface juste vos variables locales qui n'ont pas été assignées avec le mot local.

Éviter cela

method_name(){
a=11
echo $a
}

Exemple correct

method_name(){
local a=11
echo $a
}

Cette variable est portée au nom de la fonction method_name et disponible uniquement dans la fonction lorsqu'elle est appelée (et non après).

Si vous voulez un accès direct à cette variable locale, vous pouvez la définir de cette façon

local z=11

Et appelez ça comme ça

echo $z

Selon votre shell et vos besoins, vous pouvez utiliser .bash_profile ou .bashrc ou .zshrc etc. pour stocker des fonctions et des alias.

Voir cette référence pour plus d'informations sur les variables d'environnement et leurs shells respectifs

Lisez aussi ceci pour comprendre comment définir des variables d'environnement sur la ligne de commande en utilisant des extensions de shell

Vous pouvez visualiser rapidement les variables d'environnement avec env ou printenv

La convention est d'utiliser UPPERCASE

Pour définir temporairement une variable d'environnement (stockée jusqu'à la fermeture du terminal)

export A=11 ou export B="11 is part of this string"

En supposant que vous avez ouvert une nouvelle fenêtre de terminal ouSi vous utilisez .zshrc ou .bashrc ou celui que vous utilisez, vous pouvez maintenant utiliser cette variable d'environnement jusqu'à la fermeture de votre session de terminal. Remarque: n'utilisez pas $ lors de la configuration, mais utilisez $ lors du référencement de la variable.

Exemples

echo "A is equal to: $A and that is pretty nice"

echo "$A"

Comment générer un fichier

source ~/path/to/file/filename

Exemple

source ~/.bash_profile

Pour définir une variable d'environnement (jusqu'à ce que vous la supprimiez ou que vous la définissiez à nouveau)

Utilisez le code ci-dessus mais placez-le dans votre fichier ~ / .bash_profile ou ~ / .zshrc ou dans un autre fichier respectif. Enregistrez le fichier et sourcez-le.

Exemple

export B="11 is part of this string"

Vous pouvez maintenant le voir avec

env

Pour supprimer cette variable d'environnement, supprimez-la du fichier et sourcez à nouveau le fichier.

Pour supprimer temporairement une variable d'environnement, utilisez unset

Exemple

unset B

Notez qu'il n'y a pas de $ en désactivant.

Pour définir des variables d'environnement à partir de la ligne de commande

export BLABLA="environment variable set from the command line, saved in file for later use"

Vérifiez le fichier auquel vous l'envoyez, il ne démarrera peut-être pas sur une nouvelle ligne, il aura peut-être été concaténé à votre dernière ligne qui était une autre fonction, un alias ou un autre.

Ce n’est pas une réponse tout à fait complète, mais c’est un grand pas dans la bonne direction. Il montre comment la portée d'un terminal shell peut être définie, utilisée et supprimée.