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: p> 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. P> Solution: strong> p> Il suffit de faire d'objectifs code> non local et de demander s'il est défini. Le script final: p>
3 Réponses :
Pourquoi ne pas laisser buts code> hors de l'instruction code> local nom> et renommez-la à quelque chose avec une faible probabilité de collision de noms,
_pbt_complete_goals code> peut-être? Ensuite, vous pouvez vérifier si c'est NULL ou UNET SET et le définir si nécessaire. P>
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!
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. P>
+1 pour l'approche intéressante. Peut-être que je peux utiliser cela pour un problème ultérieur
Une approche que vous pouvez envisager est d'utiliser devrait fonctionner. Ceci décharge toute la logique de mise en cache à si vous voulez em> pour limiter le cache à une session de shell donnée. passe et si vous souhaitez actualiser le cache L'arrière-plan que vous pouvez passer Disclaimer: je suis l'auteur de < Code> bkt code> em> p> p> BKT code>
pour mettre en cache les données pour vous. Quelque chose comme: BKT code> qui invoque
pbt code> 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. P>
- scope = "_ pbt_commete _ $$" code> (
$$ code> se développe au PID actuel). P>
- sale = 1m code> pour invoquer
pbt code> asynchrone lorsque le cache est chaud mais vieux. Évidemment, vous pouvez régler le
- TTL code> et
- Stale CODE> Durations comme vous le voyez. P>