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")) }
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.
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 } }
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!