Mon .bashrc avait du code qui était répétitif alors j'ai utilisé une fonction pour le simplifier
do_stuff() {
local version=$1
export FOO_${version}_X="17"
export FOO_${version}_Y="42"
}
do_stuff '5.1'
do_stuff '5.2'
Cependant, maintenant, lorsque j'utilise mon shell, le nom "do_stuff" est dans la portée, ce qui me permet de compléter la tabulation et d'exécuter cette fonction (ce qui risquerait de gâcher mes variables d'environnement). Existe-t-il un moyen de rendre "do_stuff" visible uniquement à l'intérieur du fichier .bashrc?
()
créer un sous-shell. Une autre possibilité pour les cas simples est d'utiliser unefor version in 5.1 5.2
boucle, bien que cela permette deversion
s'échapper.Réponses:
Utilisez
unset
comme dernière ligne de votre.bashrc
:supprime / annule la fonction
do_stuff
.Pour supprimer / supprimer les variables, appelez-la comme suit:
la source
if type do_stuff >/dev/null 2>&1; then echo "exists"; else echo "dont"; fi
.do_stuff
est utilisé dans une autre fonction. Lorsque vous appelez cette fonction, vous obtiendrezbash: do_stuff: command not found
. Je sais que ce n’est pas le cas exact dont l’opération parlait, mais cela vaut la peine d’être souligné.L'autre option consiste à utiliser des traits de soulignement, comme dans d'autres langages de script, pour indiquer que vous ne souhaitez pas que cette fonction soit publique. La probabilité que vous tapiez _do_foo soit assez petite et aussi peu susceptible d'entrer en conflit avec quelqu'un d'autre.
la source
La seule solution à laquelle je peux penser est de le souligner et de lui donner un nom assez unique, peut-être même en le faisant ressortir avec des points comme un langage fantasmagorique ( mais cela ne fonctionnera pas dans les temps anciens
sh
).Heck, cela n'aura aucun conflit:
la source
Comme suggéré dans un commentaire, vous pouvez utiliser un sous-shell:
Nous construisons un autre script sur la sortie standard du sous-shell pour le seul effet secondaire souhaité (utilisation de
here
document<<SIDE
). Ensuite, nous source avec.
.Le pouvoir de la mise en abime
sh
est une source d'émerveillement effrayante.la source