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

有没有办法可以在我的 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"))

}

谢谢


慕尼黑5688855
浏览 184回答 3
3回答

萧十郎

不能,环境变量只能向下传递,不能向上传递。你正在尝试做后者。您的流程树:`--- shell          `--- go program          |          `--- other programgo 程序必须将环境变量传递给 shell,以便其他程序可以访问它。您可以做的是程序喜欢ssh-agent做的事情:返回一个字符串,该字符串可以被解释为设置一个环境变量,然后可以由 shell 对其进行评估。例如:func main() {    fmt.Println("WHAT='is your name'")}运行它会给你:$ ./goprogramWHAT='is your name'评估打印的字符串会给你想要的效果:$ eval `./goprogram`$ echo $WHATis your name

噜噜哒

不。进程拥有其父环境的副本,并且无法写入父环境。

守着一只汪

其他答案严格正确,但是您可以自由执行 golang 代码,将环境变量的任意值填充到 go 创建的输出文件中,然后返回到您执行 go 二进制文件的父环境中,然后将 go 的输出文件源到从你的 go 代码中计算出可用的 env 变量......这可能是你的 go 代码 write_to_file.gopackage mainimport (&nbsp; &nbsp; "io/ioutil")func main() {&nbsp; &nbsp; d1 := []byte("export whodunit=calculated_in_golang\n")&nbsp; &nbsp; if err := ioutil.WriteFile("/tmp/cool_file", d1, 0644); err != nil {&nbsp; &nbsp; &nbsp; &nbsp; panic(err)&nbsp; &nbsp; }}现在将上面的 write_to_file.go 编译成二进制文件write_to_file……这是一个 bash 脚本,它可以作为父文件执行上面的二进制文件#!/bin/bashwhodunit=aaaif [[ -z $whodunit ]]; then&nbsp; &nbsp; echo variable whodunit has no valueelse&nbsp; &nbsp; echo variable whodunit has value $whodunitfi./write_to_file # <-- execute golang binary here which populates an exported var in output file /tmp/cool_filecurr_cool=/tmp/cool_fileif [[ -f $curr_cool ]]; then # if file exists&nbsp; &nbsp; source /tmp/cool_file # shell distinguishes sourcing shell from executing, sourcing does not cut a subshell it happens in parent envfiif [[ -z $whodunit ]]; then&nbsp; &nbsp; echo variable whodunit still has no value&nbsp;else&nbsp; &nbsp; echo variable whodunit finally has value $whodunitfi这是执行上述 shell 脚本的输出variable whodunit has value aaavariable whodunit finally has value calculated_in_golang
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go