第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

在 go 程序退出后,在 shell 上保留為 env 變量設置的值

在 go 程序退出后,在 shell 上保留為 env 變量設置的值

Go
慕尼黑5688855 2021-12-27 10:41:18
有沒有辦法可以在我的 shell 上設置一個環(huán)境變量并讓它在 go 程序退出后保持不變?我嘗試了以下bash-3.2$ export WHAT=ambash-3.2$ echo $WHATambash-3.2$ go build tt.go bash-3.2$ ./ttamis your namebash-3.2$ echo $WHATambash-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"))}謝謝
查看完整描述

3 回答

?
蕭十郎

TA貢獻1815條經驗 獲得超13個贊

不能,環(huán)境變量只能向下傳遞,不能向上傳遞。你正在嘗試做后者。


您的流程樹:


`--- shell

          `--- go program

          |

          `--- other program

go 程序必須將環(huán)境變量傳遞給 shell,以便其他程序可以訪問它。


您可以做的是程序喜歡ssh-agent做的事情:返回一個字符串,該字符串可以被解釋為設置一個環(huán)境變量,然后可以由 shell 對其進行評估。


例如:


func main() {

    fmt.Println("WHAT='is your name'")

}

運行它會給你:


$ ./goprogram

WHAT='is your name'

評估打印的字符串會給你想要的效果:


$ eval `./goprogram`

$ echo $WHAT

is your name


查看完整回答
反對 回復 2021-12-27
?
嚕嚕噠

TA貢獻1784條經驗 獲得超7個贊

不。

進程擁有其父環(huán)境的副本,并且無法寫入父環(huán)境。


查看完整回答
反對 回復 2021-12-27
?
守著一只汪

TA貢獻1872條經驗 獲得超4個贊

其他答案嚴格正確,但是您可以自由執(zhí)行 golang 代碼,將環(huán)境變量的任意值填充到 go 創(chuàng)建的輸出文件中,然后返回到您執(zhí)行 go 二進制文件的父環(huán)境中,然后將 go 的輸出文件源到從你的 go 代碼中計算出可用的 env 變量......這可能是你的 go 代碼 write_to_file.go


package main


import (

    "io/ioutil"

)


func main() {


    d1 := []byte("export whodunit=calculated_in_golang\n")

    if err := ioutil.WriteFile("/tmp/cool_file", d1, 0644); err != nil {

        panic(err)

    }

}

現在將上面的 write_to_file.go 編譯成二進制文件write_to_file……這是一個 bash 腳本,它可以作為父文件執(zhí)行上面的二進制文件


#!/bin/bash


whodunit=aaa


if [[ -z $whodunit ]]; then


    echo variable whodunit has no value

else


    echo variable whodunit has value $whodunit

fi


./write_to_file # <-- execute golang binary here which populates an exported var in output file /tmp/cool_file


curr_cool=/tmp/cool_file


if [[ -f $curr_cool ]]; then # if file exists


    source /tmp/cool_file # shell distinguishes sourcing shell from executing, sourcing does not cut a subshell it happens in parent env

fi


if [[ -z $whodunit ]]; then


    echo variable whodunit still has no value 

else


    echo variable whodunit finally has value $whodunit

fi

這是執(zhí)行上述 shell 腳本的輸出


variable whodunit has value aaa

variable whodunit finally has value calculated_in_golang


查看完整回答
反對 回復 2021-12-27
  • 3 回答
  • 0 關注
  • 224 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號