首頁 >後端開發 >Golang >為什麼在 Go 中設定的環境變數沒有保留在我的終端會話中?

為什麼在 Go 中設定的環境變數沒有保留在我的終端會話中?

Mary-Kate Olsen
Mary-Kate Olsen原創
2024-11-29 21:49:11575瀏覽

Why Doesn't Setting an Environment Variable in Go Persist in My Terminal Session?

環境變數未在終端會話中持續存在

問題

在 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中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn