Heim > Backend-Entwicklung > Golang > Warum bleibt das Festlegen einer Umgebungsvariablen in Go in meiner Terminalsitzung nicht bestehen?

Warum bleibt das Festlegen einer Umgebungsvariablen in Go in meiner Terminalsitzung nicht bestehen?

Mary-Kate Olsen
Freigeben: 2024-11-29 21:49:11
Original
561 Leute haben es durchsucht

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

Umgebungsvariable bleibt in Terminalsitzung nicht bestehen

Problem

In einem Go-Programm wirkt sich das Festlegen einer Umgebungsvariablen mithilfe des „os“-Pakets auf die des Programms aus Umgebung, aber die Variable ist in der aktuellen Terminalsitzung nicht festgelegt.

package main

import (
    "os"
    "fmt"
)

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

Beim Ausführen des Programms wird „BAR“ gedruckt. wie erwartet, was darauf hinweist, dass die Umgebungsvariable für das Programm festgelegt wurde. Bei der Überprüfung der Umgebungsvariablen im Terminal mit dem Echo-Befehl bleibt diese jedoch leer.

Lösung

Wenn ein neuer Prozess erstellt wird, erbt er eine Kopie der Umgebung des übergeordneten Prozesses. Alle im neuen Prozess an der Umgebung vorgenommenen Änderungen werden nicht an den übergeordneten Prozess zurückgegeben.

Damit die Umgebungsvariable in der aktuellen Terminalsitzung bestehen bleibt, muss das Programm nach der Änderung der Umgebung eine neue Shell erzeugen. Dies kann mit dem Exec-Paket erreicht werden:

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
    }
}
Nach dem Login kopieren

Wenn Sie nun dieses Programm ausführen, wird die Umgebungsvariable „FOO“ in der aktuellen Terminalsitzung auf „BAR“ gesetzt.

Das obige ist der detaillierte Inhalt vonWarum bleibt das Festlegen einer Umgebungsvariablen in Go in meiner Terminalsitzung nicht bestehen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage