/ / Збережіть значення, встановлене для змінної env на оболонці після завершення програми go - go

Зберігати значення, встановлене для змінної env на оболонці після завершення програми go - go

Чи є спосіб я встановити змінну оточення на своїй оболонці і чи збережеться вона після закінчення програми go? Я спробував наступне

bash-3.2$ export WHAT=am
bash-3.2$ echo $WHAT
am

bash-3.2$ go build tt.go
bash-3.2$ ./tt
am
is your name
bash-3.2$ echo $WHAT
am
bash-3.2$

Код був:

package main`
import (
"fmt"
"os"`
)

func main() {
fmt.Println(os.Getenv("WHAT"))
os.Setenv("WHAT", "is your name")
fmt.Println(os.Getenv("WHAT"))
}

Дякую

Відповіді:

4 для відповіді № 1

Ні, змінні середовища можна передавати лише вниз, а не вгору. Ви намагаєтесь зробити останнє.

Ваше дерево процесів:

`--- shell
`--- go program
|
`--- other program

Програма go повинна передати змінну середовища до оболонки, щоб інша програма могла отримати доступ до неї.

Що ви можете зробити - це те, що подобається програмам ssh-agent do: повернути рядок, який можна інтерпретувати як встановлення змінної середовища, яка потім може бути оцінена оболонкою.

Наприклад:

func main() {
fmt.Println("WHAT="is your name"")
}

Запустивши його, ви отримаєте:

$ ./goprogram
WHAT="is your name"

Оцінка друкованого рядка дасть бажаний ефект:

$ eval `./goprogram`
$ echo $WHAT
is your name

1 для відповіді № 2

Немає.

Процес має копію батьківського оточення і не може писати до батьківського середовища.