diff --git a/pkg/util/procutils/cmdsetenv.go b/pkg/util/procutils/cmdsetenv.go new file mode 100644 index 0000000000..b947aac701 --- /dev/null +++ b/pkg/util/procutils/cmdsetenv.go @@ -0,0 +1,44 @@ +// Copyright 2019 Yunion +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// +build !windows + +package procutils + +import ( + "os" + "os/exec" + + "yunion.io/x/executor/client" +) + +var ( + presetEnv = []string{ + "LANG=en_US.UTF8", + } +) + +func cmdSetEnv(cmd *exec.Cmd) { + cmd.Env = append( + os.Environ(), + presetEnv..., + ) +} + +func remoteCmdSetEnv(cmd *client.Cmd) { + cmd.Env = append( + os.Environ(), + presetEnv..., + ) +} diff --git a/pkg/util/procutils/executor.go b/pkg/util/procutils/executor.go index 13d44a6482..1b4bf9a25c 100644 --- a/pkg/util/procutils/executor.go +++ b/pkg/util/procutils/executor.go @@ -68,12 +68,14 @@ type defaultExecutor struct{} func (e *defaultExecutor) Command(name string, args ...string) Cmd { cmd := exec.Command(name, args...) cmdSetSid(cmd) + cmdSetEnv(cmd) return &defaultCmd{cmd} } func (e *defaultExecutor) CommandContext(ctx context.Context, name string, args ...string) Cmd { cmd := exec.CommandContext(ctx, name, args...) cmdSetSid(cmd) + cmdSetEnv(cmd) return &defaultCmd{cmd} } @@ -90,11 +92,13 @@ type remoteExecutor struct{} func (e *remoteExecutor) Command(name string, args ...string) Cmd { cmd := client.Command(name, args...) + remoteCmdSetEnv(cmd) return cmd } func (e *remoteExecutor) CommandContext(ctx context.Context, name string, args ...string) Cmd { cmd := client.CommandContext(ctx, name, args...) + remoteCmdSetEnv(cmd) return cmd }