为了账号安全,请及时绑定邮箱和手机立即绑定

运行后如何检索命令的环境变量

运行后如何检索命令的环境变量

Go
尚方宝剑之说 2023-08-14 17:23:04
我正在exec.CommandGo 中运行一个简单的命令。现在我想知道是否可以获取该进程的所有环境变量。因为我可以用这个来设置它们:cmd := exec.Command("bash ./script.sh")cmd.Dir = filepath.Join(s.Path, "..")cmd.Stdout = os.Stdoutcmd.Stderr = os.Stderrcmd.Env = []string{"MY_VAR=some_value"}err := cmd.Run()有谁知道这是否可能?如果这也适用于 Windows/MacOS/Linux
查看完整描述

1 回答

?
小唯快跑啊

TA贡献1863条经验 获得超2个赞

简短回答:不。

我讨厌说“这是不可能的”,因为总有一些方法可以做这样的事情(例如,/proc/.../environ在 Linux 上阅读,ReadProcessMemory在 Windows 中进行一些复杂的戳戳等)。但是,它并不打算这样做,也没有可移植的解决方案。

环境变量是进程的本地变量,在创建进程时,将继承父进程的环境变量或您设置的任何变量。但它们并不是被设计为将数据发送回父进程的机制。

如果您需要将孩子的信息传达给父母,可以通过多种方式实现:

  • 您可以将数据发送到stdout父级并在父级中捕获它

  • 您可以使用管道/套接字并将相应的句柄作为命令行参数传递

  • 您可以使用共享内存/内存映射文件

  • 您可以使用已知位置的实际文件(不推荐)


查看完整回答
反对 回复 2023-08-14
  • 1 回答
  • 0 关注
  • 103 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信