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

在我将环境变量写入 /etc/enviornment 文件之后,我已经尝试了我的 go 代码中的源命令。


下面是示例代码。


package main


import (

    "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 代理。


如果有任何其他方法,请同时提及。


明月笑刀无情
浏览 249回答 2
2回答

侃侃尔雅

但是当我尝试使用 env | 检查我的 HTTP_PROXY 时 grep -i proxy 我没有看到它得到反映。这是因为环境仅在新会话中重新加载(或者如果您手动获取它)。否则,当前 shell 的变量保持不变。cmd := exec.Command("bash", "-c", "source /etc/environment")这会在子 shell 中运行命令,并且其中的更改不会影响父 shell。因此,一旦进程退出,更改就会消失。实际上,根本不可能更改可能影响父进程的环境变量,因为更改只会影响当前/子进程 - 因此无法更改父进程的环境。

杨魅力

当您运行时cmd := exec.Command("bash", "-c", "source /etc/environment"),它将加载环境变量,但仅限于由“bash”命令创建的会话,因此不会影响其他会话。你可以用我的 2 美分做什么:改变上面的代码只是为了改变文件创建一个简单的 bash 脚本来运行您的 go 文件或执行已编译的文件,然后获取 /etc/env 文件Bash 文件可能是这样的#! /bin/bash go run your_change_envfile.go source /etc/environment然后只需运行 bash 文件,不要忘记在 bash 上 chmod+x 以便它可以执行。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go