有没有一种方法可以在我的 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/