> export foo=1 &
[1] 9016
[1] + done export foo=1
> echo $foo
>
我知道当您运行命令时&
会生成一个新进程,并且export foo=1
不会在父 shell 中设置环境变量。然而,这可行吗?
具体来说,我正在 Node 和许多包上进行开发,例如运行 js 命令和动态完成设置,例如 grunt 和 gulp。那太慢了。
我正在考虑制作一个类似于自动环境。当您输入目录时,它会在后台运行js命令并完成设置,并在更改时重新运行Gruntfile.js
等gulpfile.js
。
那么,如何异步运行命令,并在命令结束时为我定义环境变量和函数?
答案1
通过严格的解释,你想做的事情是不可能的。所以问题是你需要作弊多少才能完成这样的事情?您需要 bash、一个 PROMPT_COMMAND 和两个临时文件。您还必须接受,直到后台任务完成后命令才会更新 shell。我还建议在后台进程中使用 make,以便仅根据需要运行冗长的任务。
首先设置你的事件挂钩:
PROMPT_COMMAND='[[ -e file2 ]] && { . file2; rm file2 }'
然后关闭后台进程
(echo export foo=1 > file1 && mv file1 file2 )&
为什么mv
? file2 的存在表明任务已完成并且可以解析该文件,因此您可以慢慢构建 file1。