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

从 golang 代码重新加载或获取 /etc/enviornment 文件

从 golang 代码重新加载或获取 /etc/enviornment 文件

Go
明月笑刀无情 2022-06-01 17:34:22
在我将环境变量写入 /etc/enviornment 文件之后,我已经尝试了我的 go 代码中的源命令。下面是示例代码。package mainimport (    "fmt"    "io/ioutil"    "log"    "os"    "os/exec"    "strings")func main() {    address := "localhost:9090"    file, err := os.OpenFile("/etc/environment", os.O_RDWR, 0644)    defer file.Close()    if err != nil {        panic(err)    }    input, err := ioutil.ReadAll(file)    if err != nil {        log.Fatalln(err)    }    lines := strings.Split(string(input), "\n")    for i, line := range lines {        if strings.Contains(line, "HTTP_PROXY") {            lines[i] = "HTTP_PROXY=" + address        } else {            if i == (len(lines) - 1) {                lines[i] = "HTTP_PROXY=" + address            }        }    }    output := strings.Join(lines, "\n")    err = ioutil.WriteFile("/etc/environment", []byte(output), 0644)    if err != nil {        log.Fatalln(err)    }    cmd := exec.Command("bash", "-c", "source /etc/environment")    cmd.Stdout = os.Stdout    cmd.Stderr = os.Stderr    err = cmd.Run()    fmt.Println("cmd=================>", cmd, err)    if err != nil {        fmt.Println(err)    }}它返回任何错误但是当我尝试在使用中检查我的 HTTP_PROXY 时,env | grep -i proxy我没有看到它得到反映。我只能在重新启动系统或从另一个终端再次运行 source 命令时才能看到更改已完成。我想要的只是在不重新启动系统的情况下从 go 代码更改 os 代理。如果有任何其他方法,请同时提及。
查看完整描述

2 回答

?
侃侃尔雅

TA贡献1801条经验 获得超15个赞

但是当我尝试使用 env | 检查我的 HTTP_PROXY 时 grep -i proxy 我没有看到它得到反映。

这是因为环境仅在新会话中重新加载(或者如果您手动获取它)。否则,当前 shell 的变量保持不变。

cmd := exec.Command("bash", "-c", "source /etc/environment")

这会在子 shell 中运行命令,并且其中的更改不会影响父 shell。因此,一旦进程退出,更改就会消失。

实际上,根本不可能更改可能影响父进程的环境变量,因为更改只会影响当前/子进程 - 因此无法更改父进程的环境。


查看完整回答
反对 回复 2022-06-01
?
杨魅力

TA贡献1811条经验 获得超6个赞

当您运行时cmd := exec.Command("bash", "-c", "source /etc/environment"),它将加载环境变量,但仅限于由“bash”命令创建的会话,因此不会影响其他会话。

你可以用我的 2 美分做什么:

  1. 改变上面的代码只是为了改变文件

  2. 创建一个简单的 bash 脚本来运行您的 go 文件或执行已编译的文件,然后获取 /etc/env 文件

Bash 文件可能是这样的

#! /bin/bash
go run your_change_envfile.go
source /etc/environment

然后只需运行 bash 文件,不要忘记在 bash 上 chmod+x 以便它可以执行。


查看完整回答
反对 回复 2022-06-01
  • 2 回答
  • 0 关注
  • 193 浏览
慕课专栏
更多

添加回答

举报

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