github.com/easysoft/zendata@v0.0.0-20240513203326-705bd5a7fd67/pkg/utils/shell/shell.go (about) 1 package shellUtils 2 3 import ( 4 "bufio" 5 "bytes" 6 "fmt" 7 "io" 8 "os/exec" 9 "strings" 10 11 commonUtils "github.com/easysoft/zendata/pkg/utils/common" 12 ) 13 14 func Exec(cmdStr string) (ret string, err error) { 15 return ExecInDir(cmdStr, "") 16 } 17 18 func ExecInDir(cmdStr string, dir string) (ret string, err error) { 19 var cmd *exec.Cmd 20 if commonUtils.IsWin() { 21 cmd = exec.Command("cmd", "/C", cmdStr) 22 } else { 23 cmd = exec.Command("/bin/bash", "-c", cmdStr) 24 } 25 26 if dir != "" { 27 cmd.Dir = dir 28 } 29 30 var out bytes.Buffer 31 cmd.Stdout = &out 32 33 err = cmd.Run() 34 ret = out.String() 35 return 36 } 37 38 func ExeWithOutput(cmdStr string) []string { 39 var cmd *exec.Cmd 40 if commonUtils.IsWin() { 41 cmd = exec.Command("cmd", "/C", cmdStr) 42 } else { 43 cmd = exec.Command("/bin/bash", "-c", cmdStr) 44 } 45 46 output := make([]string, 0) 47 48 stdout, err := cmd.StdoutPipe() 49 50 if err != nil { 51 fmt.Println(err) 52 return output 53 } 54 55 cmd.Start() 56 57 if err != nil { 58 output = append(output, fmt.Sprint(err)) 59 return output 60 } 61 62 reader := bufio.NewReader(stdout) 63 for { 64 line, err2 := reader.ReadString('\n') 65 if err2 != nil || io.EOF == err2 { 66 break 67 } 68 fmt.Println(strings.TrimRight(line, "\n")) 69 output = append(output, line) 70 } 71 72 cmd.Wait() 73 74 return output 75 }