2016-12-14 14 views
4

私は一般的なコマンドラインツール(有能なプレイブック)のgo wrapperを書いています。exec.Commandコールでパラメータを渡す必要があります。 bashの同等は次のようになります。これまで私はちょうどos.Setenvを使用してMY_VARを輸出したENV VARをexec.Commandに渡しますか?

MY_VAR=some_value ansible-playbook -i custom-inventory playbook.yml 

、それは脚本の並列実行のための問題を引き起こします。ですから、コマンドの前にvarを渡して、各呼び出しにこのvarの値があるようにします。

私はexec.Commandでこれを行う方法は本当にわかりません。なぜなら、その関数の最初のパラメータは "command"ですからです。任意のヒント?

編集:Cmd構造体のEnvフィールドを使用してみましたが、すべての環境変数をオーバーライドしました。かなりの量の設定があり、この1つの環境変数をオーバーライドしたいだけです。これはできないのですか?解決のために疑問に思ったものについては

答えて

7

cmd := exec.Command("ansible-playbook", args...) 
    cmd.Env = os.Environ() 
    cmd.Env = append(cmd.Env, "MY_VAR=some_value") 

は、既存の環境を維持し、その後、あなたが望む一つの値を書き込みます。

godocとオープンソースに感謝します!

+0

これは、現在のプロセスの環境に既にあるすべての 'MY_VAR 'を上書きすることに注意してください。これがあなたの意図ならば、このソリューションはうまく動作します。 –

+1

そうでなければ、 'append()'行を 'if _、ok:= os.LookupEnv(" MY_VAR ")のようなものの中に入れたいと思うでしょう。 !ok {...} ' –

関連する問題