概要
以下自分用のメモです。よく忘れるのでここにメモメモ。。。
外部コマンド実行時に追加の環境変数を指定したい場合がたまにあります。
その場合は (*exec.Cmd).Env に値を追加したスライスを再設定することで可能となります。
サンプル
package cmdexec import ( "errors" "os" "os/exec" "runtime" "github.com/devlights/gomy/output" ) // WithEnv -- *exec.Cmd 実行時に追加の環境変数を指定するサンプルです. // // REFERENCES // - https://dev.to/tobychui/quick-notes-for-go-os-exec-3ejg func WithEnv() error { if runtime.GOOS == "windows" { return errors.New("this example cannot run on Windows, sorry") } const ( Shell = "/bin/bash" ) var ( cmd *exec.Cmd out []byte err error ) // // 環境変数の追加なし // cmd = exec.Command(Shell, "-c", "env | grep LANG") out, err = cmd.Output() if err != nil { return err } output.Stdoutf("[no append]", "\n%s\n", out) output.StdoutHr() // // 環境変数の追加あり // cmd = exec.Command(Shell, "-c", "env | grep LANG") cmd.Env = append(os.Environ(), "LANG2=Japanese") out, err = cmd.Output() if err != nil { return err } output.Stdoutf("[append ]", "\n%s\n", out) output.StdoutHr() return nil }
実行すると以下のようになります。
gitpod /workspace/try-golang (master) $ make run go run -race main.go -onetime -example "" ENTER EXAMPLE NAME: cmdexec_env [Name] "cmdexec_env" [no append] LANG=en_US.UTF-8 -------------------------------------------------- [append ] LANG2=Japanese LANG=en_US.UTF-8 -------------------------------------------------- [Elapsed] 4.883609ms
参考情報
過去の記事については、以下のページからご参照下さい。
サンプルコードは、以下の場所で公開しています。