Exécuter une command en arrière-plan qui définit env var ou définit la fonction

> export foo=1 & [1] 9016 [1] + done export foo=1 > echo $foo > 

Je sais que lorsque vous exécutez une command avec & vous générez un nouveau process et que l' export foo=1 ne place pas les vars env dans le shell parent. Cependant, est-ce faisable?

Spefically, je développe sur Node et beaucoup de packages comme l'exécution des commands js et l'achèvement de l'installation à la volée, par exemple grognement et gulp. C'est trop lent.

Je pense à faire un utilitaire similaire à Autoenv . Lorsque vous entrez un directory, il exécute les commands js et l'achèvement de la configuration en arrière-plan, puis les Gruntfile.js lorsque Gruntfile.js ou gulpfile.js change, etc.

Alors, comment puis-je exécuter une command de façon asynchronous, et quand elle se termine, définit env vars & functions pour moi?

Par une interprétation ssortingcte, ce que vous voulez faire est impossible. Donc, la question est combien devez-vous sortingcher pour tirer quelque chose comme ça? Vous avez besoin de bash, d'un PROMPT_COMMAND et de deux files temporaires. vous devrez également accepter que le shell ne sera pas mis à jour jusqu'à la command après l'achèvement de la tâche d'arrière-plan. Je recommand également d'utiliser make dans le process d'arrière-plan afin que la tâche longue ne soit exécutée que si nécessaire.

Configurez d'abord votre hook d'événement:

 PROMPT_COMMAND='[[ -e file2 ]] && { . file2; rm file2 }' 

puis éteindre le process d'arrière-plan

 (echo export foo=1 > file1 && mv file1 file2 )& 

Pourquoi le mv ? La présence de file2 indique que la tâche est terminée et que le file peut être analysé, de sorte que vous pouvez prendre votre time de build sweet file1.