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  }