go - 在 go 程序退出后,在 shell 上保留为 env 变量设置的值

标签 go

有没有一种方法可以在我的 shell 上设置一个环境变量,并让它在 go 程序退出后保持不变?我尝试了以下

bash-3.2$ export WHAT=am
bash-3.2$ echo $WHAT
am

bash-3.2$ go build tt.go 
bash-3.2$ ./tt
am
is your name
bash-3.2$ echo $WHAT
am
bash-3.2$ 

代码是:

package main`
import (
        "fmt"
       "os"`
)

func main() {
fmt.Println(os.Getenv("WHAT"))
os.Setenv("WHAT", "is your name")
fmt.Println(os.Getenv("WHAT"))
}

谢谢

最佳答案

不行,环境变量只能向下传递,不能向上传递。你正在尝试做后者。

你的进程树:

`--- shell
          `--- go program
          |
          `--- other program

go 程序必须将环境变量传递给 shell,以便其他程序可以访问它。

您可以做的是像 ssh-agent 这样的程序所做的:返回一个字符串,该字符串可以被解释为设置一个环境变量,然后由 shell 对其进行评估。

例如:

func main() {
    fmt.Println("WHAT='is your name'")
}

运行它会给你:

$ ./goprogram
WHAT='is your name'

评估打印的字符串会给你想要的效果:

$ eval `./goprogram`
$ echo $WHAT
is your name

关于go - 在 go 程序退出后,在 shell 上保留为 env 变量设置的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36074851/

相关文章:

go - 通过Visual Studio Code读取golang源代码,编译器警告,如何修复

go - 在 go lang 中对字符串进行排序

memory-management - 在 Go 中使用 append 进行前置的机制是什么?

http - http.RoundTripper 应该什么时候关闭它的连接?

arrays - 在 Go 中生成一个随机的、固定长度的字节数组

qt - 如何在无边框窗口中保持阴影

unit-testing - 在 go 中测试 CLI 参数

go - 如何在 Visual Studio Code VS 上同时修改多个 go/golang 项目?

json - 得到 : Cannot unmarshal string into Go value

go - 正确处理错误