>백엔드 개발 >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 명령어를 사용하여 터미널에서 환경변수를 확인해 보면 비어있는 상태로 남아있습니다.

해결책

새 프로세스가 생성되면 상위 프로세스의 환경 복사본을 상속받습니다. 새 프로세스의 환경에 대한 변경 사항은 상위 프로세스로 다시 전파되지 않습니다.

환경 변수가 현재 터미널 세션에서 유지되도록 하려면 프로그램이 환경을 수정한 후 새 셸을 생성해야 합니다. 이는 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으로 문의하세요.