首页 > 解决方案 > 在golang中重用进程来持久化环境变量

问题描述

我目前正在努力在 golang 中重用进程。

更多背景信息:我正在构建的 CLI 将在开发中使用,CLI 将用于设置开发环境,通过开箱即用的支持使部署/构建和测试变得简单。为了使 CLI 灵活,我希望用户能够集成自定义定义的脚本。例如,一个脚本会覆盖 docker 环境变量,以便 CLI 部署脚本部署到正确的环境。这些环境使用以下命令公开:此脚本将语句minikube docker-env打印到. 通常,您会运行以将这些环境变量应用于当前的 shell。但我希望我的 CLI 能够跨脚本共享这些变量。exportstdouteval $(minikube docker-env)

现在假设我定义了两个命令。AB。这两个命令都是简单的 bash 脚本。但例如可以在模式或 python 内部运行。

脚本A

export FOO="bar"

脚本B

echo $FOO

这两个脚本都是这样执行的:

cmd := exec.Command(bash, [PATH_TO_SCRIPT])
stdout, err := cmd.Output()

我想要实现的是有一个执行这些脚本的过程,但我很难找到一种方法。

我想通过自己定义的脚本来实现这一点的原因是 CLI 的用户可以轻松地添加脚本并在以后使用这些环境变量。

标签: goenvironment-variables

解决方案


除了:不可能之外,您的问题没有其他答案。那是因为您的问题涉及对 UNIX 环境变量如何工作以及 Go 语言exec.Command()函数如何工作的基本误解。进程无法修改其父进程的环境变量;或任何其他程序。Go langexec.Command()调用启动一个新进程,该进程不会影响执行该操作的进程的环境变量。你需要重新考虑你的架构。


推荐阅读