猿问

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

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


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


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


尚方宝剑之说
浏览 104回答 1
1回答

小唯快跑啊

简短回答:不。我讨厌说“这是不可能的”,因为总有一些方法可以做这样的事情(例如,/proc/.../environ在 Linux 上阅读,ReadProcessMemory在 Windows 中进行一些复杂的戳戳等)。但是,它并不打算这样做,也没有可移植的解决方案。环境变量是进程的本地变量,在创建进程时,将继承父进程的环境变量或您设置的任何变量。但它们并不是被设计为将数据发送回父进程的机制。如果您需要将孩子的信息传达给父母,可以通过多种方式实现:您可以将数据发送到stdout父级并在父级中捕获它您可以使用管道/套接字并将相应的句柄作为命令行参数传递您可以使用共享内存/内存映射文件您可以使用已知位置的实际文件(不推荐)
随时随地看视频慕课网APP

相关分类

Go
我要回答