Rumah >pembangunan bahagian belakang >Golang >Mengapakah Menetapkan Pembolehubah Persekitaran dalam Go Berterusan dalam Sesi Terminal Saya?

Mengapakah Menetapkan Pembolehubah Persekitaran dalam Go Berterusan dalam Sesi Terminal Saya?

Mary-Kate Olsen
Mary-Kate Olsenasal
2024-11-29 21:49:11575semak imbas

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

Pembolehubah Persekitaran Tidak Berterusan dalam Sesi Terminal

Masalah

Dalam program Go, menetapkan pembolehubah persekitaran menggunakan pakej "os" mempengaruhi program persekitaran, tetapi pembolehubah tidak ditetapkan dalam sesi terminal semasa.

package main

import (
    "os"
    "fmt"
)

func main() {
    _ = os.Setenv("FOO", "BAR")
    fmt.Println(os.Getenv("FOO"))
}

Menjalankan atur cara mencetak "BAR" seperti yang dijangkakan, menunjukkan bahawa pembolehubah persekitaran telah ditetapkan untuk atur cara. Walau bagaimanapun, apabila menyemak pembolehubah persekitaran dalam terminal menggunakan arahan gema, ia kekal kosong.

Penyelesaian

Apabila proses baharu dibuat, ia mewarisi salinan persekitaran proses induk. Sebarang perubahan yang dibuat kepada persekitaran dalam proses baharu tidak disebarkan kembali kepada proses induk.

Untuk menjadikan pembolehubah persekitaran berterusan dalam sesi terminal semasa, program perlu menghasilkan cangkerang baharu selepas mengubah suai persekitaran. Ini boleh dicapai menggunakan pakej 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
    }
}

Sekarang, menjalankan program ini akan menetapkan pembolehubah persekitaran "FOO" kepada "BAR" dalam sesi terminal semasa.

Atas ialah kandungan terperinci Mengapakah Menetapkan Pembolehubah Persekitaran dalam Go Berterusan dalam Sesi Terminal Saya?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn