在后台运行设置环境变量或定义函数的命令

在后台运行设置环境变量或定义函数的命令
> export foo=1 &
[1] 9016
[1] + done      export foo=1
> echo $foo

>

我知道当您运行命令时&会生成一个新进程,并且export foo=1不会在父 shell 中设置环境变量。然而,这可行吗?

具体来说,我正在 Node 和许多包上进行开发,例如运行 js 命令和动态完成设置,例如 grunt 和 gulp。那太慢了。

我正在考虑制作一个类似于自动环境。当您输入目录时,它会在后台运行js命令并完成设置,并在更改时重新运行Gruntfile.jsgulpfile.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。

相关内容