Чи є спосіб я встановити змінну оточення на своїй оболонці і чи збережеться вона після закінчення програми 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
Немає.
Процес має копію батьківського оточення і не може писати до батьківського середовища.