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 中国語 Web サイトの他の関連記事を参照してください。