- 前提:服务器shell脚本执行正常,但是go调用shell脚本错误
// 加在此处
cmd := exec.Command("bash","-c",your command)
//_, err = cmd.Output()
// 直接上述cmd.Output() 不打印错误详情直接exit
var out bytes.Buffer
var stderr bytes.Buffer
cmd.Stdout = &out
cmd.Stderr = &stderr
err = cmd.Run()
if err != nil {
gt.Logger().Error(err, stderr.String())
} else {
gt.Logger().Info(out.String())
}
- 解决方式:
命令行打印PATH环境变量
linux
echo $PATH
--> your path
最上面代码加一行
// 加在此处
os.Setenv("PATH", your path)
cmd := exec.Command("bash","-c",your command)
-
补充:如果仍然有问题,如:python3报错
ModuleNotFoundError: No module named xxx
1.激活python环境,eg:conda activate xxx
2.echo $PATH
--> your path,再次执行前面步骤
3.不妨探究下python执行的依赖环境,激活后echo $PATH
,多出很多环境变量信息 -
探究:
这种方式其实不常见,测试发现, 主要是业务方
将环境变量配置初始化配置在了用户目录.bashrc
脚本中
命令行ssh登录后确实都很正常, 但是golang运行默认加载系统PATH(os.Getenv("PATH")
)环境,不走用户环境变量PATH,少了用户那部分可执行程序
打印加一下环境变量PATH即可