> 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.