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

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

Mary-Kate Olsen
發布: 2024-11-29 21:49:11
原創
572 人瀏覽過

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

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板