在 Go程式中,使用“os”套件設定環境變數會影響程式的環境,但目前終端中未設定該變數session.
package main import ( "os" "fmt" ) func main() { _ = os.Setenv("FOO", "BAR") fmt.Println(os.Getenv("FOO")) }
執行程式按預期列印“BAR”,表示已為程式設定了環境變數。但是,當使用 echo 命令檢查終端機中的環境變數時,它仍然為空。
建立新進程時,它會繼承父進程環境的副本。新進程中對環境所做的任何變更都不會傳回父進程。
為了讓環境變數保留在目前終端會話中,程式需要在修改環境後產生一個新的 shell。這可以使用 exec 套件來實現:
package main import ( "os/exec" ) func main() { _ = os.Setenv("FOO", "BAR") // Spawn a new shell with the updated environment cmd := exec.Command("bash") cmd.Stdin = os.Stdin cmd.Stdout = os.Stdout cmd.Stderr = os.Stderr // Start the shell err := cmd.Start() if err != nil { fmt.Println(err) return } // Wait for the shell to terminate err = cmd.Wait() if err != nil { fmt.Println(err) return } }
現在,執行此程式將在目前終端會話中將環境變數「FOO」設為「BAR」。
以上是為什麼在 Go 中設定的環境變數沒有保留在我的終端會話中?的詳細內容。更多資訊請關注PHP中文網其他相關文章!