command/execute.go

86 lines
1.9 KiB
Go
Raw Normal View History

2022-05-21 11:35:01 +08:00
// Package command ...
2022-05-20 22:23:40 +08:00
//
// Description : command ...
//
// Author : go_developer@163.com<白茶清欢>
//
// Date : 2022-05-20 21:48
package command
import (
"errors"
"os"
2022-05-20 22:23:40 +08:00
"os/exec"
"time"
2022-05-21 11:35:01 +08:00
"git.zhangdeman.cn/zhangdeman/command/define"
2022-05-20 22:23:40 +08:00
)
// Execute 执行系统命令
//
// Author : go_developer@163.com<白茶清欢>
//
// Date : 21:49 2022/5/20
2022-05-21 19:55:28 +08:00
func Execute(workDir string, command string, param []string) *define.Result {
2022-05-20 22:23:40 +08:00
//执行命令
2022-05-21 19:55:28 +08:00
result := &define.Result{
2022-05-20 22:31:29 +08:00
WorkDir: workDir,
2022-05-21 19:55:28 +08:00
Param: param,
2022-05-21 11:35:01 +08:00
Error: nil,
2022-05-20 22:23:40 +08:00
Output: nil,
StartTime: time.Now().UnixNano(),
FinishTime: 0,
}
defer func() {
result.FinishTime = time.Now().UnixNano()
}()
if len(workDir) == 0 {
// 默认为项目根目录
result.WorkDir, result.Error = os.Getwd()
}
if nil != result.Error {
return result
}
var (
fileInfo os.FileInfo
)
if fileInfo, result.Error = os.Stat(result.WorkDir); nil != result.Error {
if !os.IsExist(result.Error) {
return result
}
// 目录已存在
result.Error = nil
}
if !fileInfo.IsDir() {
result.Error = errors.New(result.WorkDir + " 工作目录不存在")
}
2022-05-21 11:35:01 +08:00
if result.CmdPath, result.Error = Check(command); nil != result.Error {
2022-05-20 22:31:29 +08:00
return result
}
2022-05-20 22:23:40 +08:00
cmdInstance := exec.Command(command, param...)
cmdInstance.Dir = result.WorkDir
2022-05-21 11:35:01 +08:00
result.Output, result.Error = cmdInstance.CombinedOutput()
2023-04-09 22:56:24 +08:00
if len(result.Output) >= 2 {
if string(result.Output[len(result.Output)-1]) == "n" && string(result.Output[len(result.Output)-2]) == "\\" {
result.Output = result.Output[0 : len(result.Output)-2]
}
}
2022-05-20 22:23:40 +08:00
return result
}
// Check 检测命令
//
// Author : go_developer@163.com<白茶清欢>
//
// Date : 21:57 2022/5/20
func Check(command string) (string, error) {
if path, err := exec.LookPath(command); err != nil {
return "", errors.New(command + " 命令不存在 : " + err.Error())
} else {
return path, nil
}
}