go - 在golang中重用进程来持久化环境变量
问题描述
我目前正在努力在 golang 中重用进程。
更多背景信息:我正在构建的 CLI 将在开发中使用,CLI 将用于设置开发环境,通过开箱即用的支持使部署/构建和测试变得简单。为了使 CLI 灵活,我希望用户能够集成自定义定义的脚本。例如,一个脚本会覆盖 docker 环境变量,以便 CLI 部署脚本部署到正确的环境。这些环境使用以下命令公开:此脚本将语句minikube docker-env
打印到. 通常,您会运行以将这些环境变量应用于当前的 shell。但我希望我的 CLI 能够跨脚本共享这些变量。export
stdout
eval $(minikube docker-env)
现在假设我定义了两个命令。A
和B
。这两个命令都是简单的 bash 脚本。但例如可以在模式或 python 内部运行。
脚本A
:
export FOO="bar"
脚本B
:
echo $FOO
这两个脚本都是这样执行的:
cmd := exec.Command(bash, [PATH_TO_SCRIPT])
stdout, err := cmd.Output()
我想要实现的是有一个执行这些脚本的过程,但我很难找到一种方法。
我想通过自己定义的脚本来实现这一点的原因是 CLI 的用户可以轻松地添加脚本并在以后使用这些环境变量。
解决方案
除了:不可能之外,您的问题没有其他答案。那是因为您的问题涉及对 UNIX 环境变量如何工作以及 Go 语言exec.Command()
函数如何工作的基本误解。进程无法修改其父进程的环境变量;或任何其他程序。Go langexec.Command()
调用启动一个新进程,该进程不会影响执行该操作的进程的环境变量。你需要重新考虑你的架构。
推荐阅读
- jquery - JQuery 根据父 div 从 div 获取左侧和顶部位置
- javascript - 使用 Object.values(map) 时,类型“ObjectConstructor”Typescript 上不存在属性“values”
- android - 谷歌播放中的应用程序上传显示错误未优化的 Apk
- javascript - 为什么orm函数的返回对象限制为100?
- c# - 拒绝取消的任务如何取消和释放资源
- javascript - 读取 Json 并将其转换为 JavaScript 的 Python 脚本
- jquery - 如何在带有 ASP.NET MVC 的 jQuery Datatable 中使用存储过程?
- javascript - 使用 Mobx React 装饰器进行热重载
- java - Java Streams - 在 map() 中使用 setter
- apostrophe-cms - 向小部件添加自定义参数