登录
首页 >  Golang >  Go问答

如何使用命令行检索环境变量

来源:stackoverflow

时间:2024-03-09 23:27:25 154浏览 收藏

学习Golang要努力,但是不要急!今天的这篇文章《如何使用命令行检索环境变量》将会介绍到等等知识点,如果你想深入学习Golang,可以关注我!我会持续更新相关文章的,希望对大家都能有所帮助!

问题内容

我正在 go 中通过 exec.command 运行一个简单的命令。现在我想知道是否可以获取这个进程的所有环境变量。

因为我可以使用这个来设置它们:

cmd := exec.Command("bash ./script.sh")
cmd.Dir = filepath.Join(s.Path, "..")
cmd.Stdout = os.Stdout
cmd.Stderr = os.Stderr
cmd.Env = []string{"MY_VAR=some_value"}
err := cmd.Run()

有人知道这是否可行吗?如果这也适用于 windows/macos/linux


解决方案


简短回答:不。

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

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

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

  • 您可以将数据发送到 stdout 并在父级中捕获它
  • 您可以使用管道/套接字并将相应的句柄作为命令行参数传递
  • 您可以使用共享内存/内存映射文件
  • 您可以使用已知位置的实际文件(不推荐)

到这里,我们也就讲完了《如何使用命令行检索环境变量》的内容了。个人认为,基础知识的学习和巩固,是为了更好的将其运用到项目中,欢迎关注golang学习网公众号,带你了解更多关于的知识点!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>