8
votes

Comment mettre en cache une variable utilisée à l'intérieur d'un script d'achèvement de bash pour la session en cours

Dans mon fichier d'achèvement de bash, je recherche les chaînes d'achèvement par un script externe, qui prend un certain temps (1-2 secondes). Étant donné que ces chaînes restent la même la même pour le reste du temps, la coque actuelle fonctionne, je veux les mettre en cache et lorsque l'achèvement de bash est déclenché la prochaine fois, il doit utiliser la chaîne mise en cache au lieu de la recherche chère, de sorte qu'elle complète immédiatement lorsque son exécutoire la deuxième fois.

Pour obtenir un sentiment de dossier d'achèvement, voici la partie importante du fichier d'achèvement: xxx

Comment mettre en cache le Sortie de getDeployableFiles pour le reste de la session Shell? J'ai besoin d'une sorte de variable globale ici, ou d'autres astuces.

Solution:

Il suffit de faire d'objectifs non local et de demander s'il est défini. Le script final: xxx


0 commentaires

3 Réponses :


8
votes

Pourquoi ne pas laisser buts hors de l'instruction local et renommez-la à quelque chose avec une faible probabilité de collision de noms, _pbt_complete_goals peut-être? Ensuite, vous pouvez vérifier si c'est NULL ou UNET SET et le définir si nécessaire.


1 commentaires

Je savais qu'il me faudra quelque chose de mal avec mon script lui-même. Faire des objectifs non globaux et demandant si c'est fixé résolu le problème. Merci!



1
votes

Vous pouvez écrire les valeurs en cache dans un fichier avec le PID de la coque actuelle, puis le source et vérifiez que le PID correspond. Si c'est le cas, utilisez la valeur mise en cache, sinon recalculer.


1 commentaires

+1 pour l'approche intéressante. Peut-être que je peux utiliser cela pour un problème ultérieur



1
votes

Une approche que vous pouvez envisager est d'utiliser BKT pour mettre en cache les données pour vous. Quelque chose comme: xxx

devrait fonctionner. Ceci décharge toute la logique de mise en cache à BKT qui invoque pbt chaque fois qu'il y a une cache Miss. Il fonctionne également à travers les sessions de la coquille, de sorte que vous n'avez pas besoin de lutter avec un scopage variable ou similaire.

si vous voulez pour limiter le cache à une session de shell donnée. passe - scope = "_ pbt_commete _ $$" ( $$ se développe au PID actuel).

et si vous souhaitez actualiser le cache L'arrière-plan que vous pouvez passer - sale = 1m pour invoquer pbt asynchrone lorsque le cache est chaud mais vieux. Évidemment, vous pouvez régler le - TTL et - Stale Durations comme vous le voyez.

Disclaimer: je suis l'auteur de < Code> bkt


0 commentaires