159 lines
3.1 KiB
Go
159 lines
3.1 KiB
Go
package command
|
|
|
|
import (
|
|
"bufio"
|
|
"fmt"
|
|
"io/ioutil"
|
|
"os"
|
|
"os/exec"
|
|
"path/filepath"
|
|
"strings"
|
|
)
|
|
|
|
func OnlyExec(cmdStr string) {
|
|
cmd := exec.Command("/bin/bash", "-c", cmdStr)
|
|
stdout, err := cmd.StdoutPipe()
|
|
if err != nil {
|
|
fmt.Println(err)
|
|
return
|
|
}
|
|
defer stdout.Close()
|
|
if err := cmd.Start(); err != nil {
|
|
fmt.Println(err)
|
|
return
|
|
}
|
|
|
|
if err := cmd.Wait(); err != nil {
|
|
fmt.Println(err)
|
|
}
|
|
}
|
|
|
|
func ExecResultStrArray(cmdStr string) []string {
|
|
cmd := exec.Command("/bin/bash", "-c", cmdStr)
|
|
stdout, err := cmd.StdoutPipe()
|
|
if err != nil {
|
|
fmt.Println(err)
|
|
return nil
|
|
}
|
|
defer stdout.Close()
|
|
if err = cmd.Start(); err != nil {
|
|
fmt.Println(err)
|
|
return nil
|
|
}
|
|
// str, err := ioutil.ReadAll(stdout)
|
|
networklist := []string{}
|
|
outputBuf := bufio.NewReader(stdout)
|
|
for {
|
|
output, _, err := outputBuf.ReadLine()
|
|
if err != nil {
|
|
if err.Error() != "EOF" {
|
|
fmt.Printf("Error :%s\n", err)
|
|
}
|
|
break
|
|
}
|
|
networklist = append(networklist, string(output))
|
|
}
|
|
|
|
if err := cmd.Wait(); err != nil {
|
|
fmt.Println(err)
|
|
}
|
|
|
|
return networklist
|
|
}
|
|
|
|
func ExecResultStr(cmdStr string) string {
|
|
cmd := exec.Command("/bin/bash", "-c", cmdStr)
|
|
println(cmd.String())
|
|
|
|
stdout, err := cmd.StdoutPipe()
|
|
if err != nil {
|
|
fmt.Println(err)
|
|
return ""
|
|
}
|
|
defer stdout.Close()
|
|
if err := cmd.Start(); err != nil {
|
|
fmt.Println(err)
|
|
return ""
|
|
}
|
|
str, err := ioutil.ReadAll(stdout)
|
|
if err != nil {
|
|
fmt.Println(err)
|
|
return ""
|
|
}
|
|
|
|
if err := cmd.Wait(); err != nil {
|
|
fmt.Println(err)
|
|
}
|
|
|
|
return string(str)
|
|
}
|
|
|
|
// 执行 lsblk 命令
|
|
func ExecLSBLK() []byte {
|
|
output, err := exec.Command("lsblk", "-O", "-J", "-b").Output()
|
|
if err != nil {
|
|
fmt.Println("lsblk", err)
|
|
return nil
|
|
}
|
|
return output
|
|
}
|
|
|
|
// 执行 lsblk 命令
|
|
func ExecLSBLKByPath(path string) []byte {
|
|
output, err := exec.Command("lsblk", path, "-O", "-J", "-b").Output()
|
|
if err != nil {
|
|
fmt.Println("lsblk", err)
|
|
return nil
|
|
}
|
|
return output
|
|
}
|
|
|
|
func ExecuteScripts(scriptDirectory string) {
|
|
if _, err := os.Stat(scriptDirectory); os.IsNotExist(err) {
|
|
fmt.Printf("No post-start scripts at %s\n", scriptDirectory)
|
|
return
|
|
}
|
|
|
|
files, err := os.ReadDir(scriptDirectory)
|
|
if err != nil {
|
|
fmt.Printf("Failed to read from script directory %s: %s\n", scriptDirectory, err.Error())
|
|
return
|
|
}
|
|
|
|
for _, file := range files {
|
|
if file.IsDir() {
|
|
continue
|
|
}
|
|
|
|
scriptFilepath := filepath.Join(scriptDirectory, file.Name())
|
|
|
|
f, err := os.Open(scriptFilepath)
|
|
if err != nil {
|
|
fmt.Printf("Failed to open script file %s: %s\n", scriptFilepath, err.Error())
|
|
continue
|
|
}
|
|
f.Close()
|
|
|
|
scanner := bufio.NewScanner(f)
|
|
scanner.Scan()
|
|
shebang := scanner.Text()
|
|
|
|
interpreter := "/bin/sh"
|
|
if strings.HasPrefix(shebang, "#!") {
|
|
interpreter = shebang[2:]
|
|
}
|
|
|
|
cmd := exec.Command(interpreter, scriptFilepath)
|
|
|
|
fmt.Printf("Executing post-start script %s using %s\n", scriptFilepath, interpreter)
|
|
|
|
cmd.Stdout = os.Stdout
|
|
cmd.Stderr = os.Stderr
|
|
|
|
err = cmd.Run()
|
|
if err != nil {
|
|
fmt.Printf("Failed to execute post-start script %s: %s\n", scriptFilepath, err.Error())
|
|
}
|
|
}
|
|
fmt.Println("Finished executing post-start scripts.")
|
|
}
|