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

kbi*_*nce 4 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$ 
Run Code Online (Sandbox Code Playgroud)

代码是:

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

func main() {
fmt.Println(os.Getenv("WHAT"))
os.Setenv("WHAT", "is your name")
fmt.Println(os.Getenv("WHAT"))
}
Run Code Online (Sandbox Code Playgroud)

谢谢

nem*_*emo 5

不,环境变量只能传递,而不能传递.你正试图做后者.

您的流程树:

`--- shell
          `--- go program
          |
          `--- other program
Run Code Online (Sandbox Code Playgroud)

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

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

例如:

func main() {
    fmt.Println("WHAT='is your name'")
}
Run Code Online (Sandbox Code Playgroud)

运行它会给你:

$ ./goprogram
WHAT='is your name'
Run Code Online (Sandbox Code Playgroud)

评估打印的字符串将为您提供所需的效果:

$ eval `./goprogram`
$ echo $WHAT
is your name
Run Code Online (Sandbox Code Playgroud)