我有这个代码,我只想设置一个环境变量:
package main
import (
"os"
"fmt"
)
func main() {
_ = os.Setenv("FOO", "BAR")
fmt.Println(os.Getenv("FOO"))
}
Run Code Online (Sandbox Code Playgroud)
运行此文件:
>$ go run file.go
BAR
Run Code Online (Sandbox Code Playgroud)
该fmt.Println呼叫打印BAR正常,但后来我预计这个环境变量来然而在我的会话设置以及,:
>$ echo $FOO
>$
Run Code Online (Sandbox Code Playgroud)
什么都没有$FOO,它是空的.这是预期的行为吗?如果是这样,我怎样才能使这个env变量在我的会话中持久保存,并使用这样的go程序设置它?
不确定这最终是你想做什么,但它确实给你你要求的结果.
package main
import (
"os"
"syscall"
)
func main() {
os.Setenv("FOO", "BAR")
syscall.Exec(os.Getenv("SHELL"), []string{os.Getenv("SHELL")}, syscall.Environ())
}
Run Code Online (Sandbox Code Playgroud)
这将使用具有已修改环境的新shell替换go进程.
您可能希望将其称为"exec APPNAME",因为这样可以避免在shell中使用shell.
例:
#!/bin/bash
exec go-env-setter-app
Run Code Online (Sandbox Code Playgroud)
你最终会得到一个带有修改环境的bash shell
| 归档时间: |
|
| 查看次数: |
2936 次 |
| 最近记录: |