command_helper.go 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147
  1. package command
  2. import (
  3. "bufio"
  4. "fmt"
  5. "io/ioutil"
  6. "os"
  7. "os/exec"
  8. "path/filepath"
  9. "strings"
  10. )
  11. func OnlyExec(cmdStr string) {
  12. cmd := exec.Command("/bin/bash", "-c", cmdStr)
  13. stdout, err := cmd.StdoutPipe()
  14. if err != nil {
  15. return
  16. }
  17. defer stdout.Close()
  18. if err := cmd.Start(); err != nil {
  19. return
  20. }
  21. cmd.Wait()
  22. return
  23. }
  24. func ExecResultStrArray(cmdStr string) []string {
  25. cmd := exec.Command("/bin/bash", "-c", cmdStr)
  26. stdout, err := cmd.StdoutPipe()
  27. if err != nil {
  28. fmt.Println(err)
  29. return nil
  30. }
  31. defer stdout.Close()
  32. if err = cmd.Start(); err != nil {
  33. fmt.Println(err)
  34. return nil
  35. }
  36. // str, err := ioutil.ReadAll(stdout)
  37. networklist := []string{}
  38. outputBuf := bufio.NewReader(stdout)
  39. for {
  40. output, _, err := outputBuf.ReadLine()
  41. if err != nil {
  42. if err.Error() != "EOF" {
  43. fmt.Printf("Error :%s\n", err)
  44. }
  45. break
  46. }
  47. networklist = append(networklist, string(output))
  48. }
  49. cmd.Wait()
  50. return networklist
  51. }
  52. func ExecResultStr(cmdStr string) string {
  53. cmd := exec.Command("/bin/bash", "-c", cmdStr)
  54. println(cmd.String())
  55. stdout, err := cmd.StdoutPipe()
  56. if err != nil {
  57. fmt.Println(err)
  58. return ""
  59. }
  60. defer stdout.Close()
  61. if err := cmd.Start(); err != nil {
  62. fmt.Println(err)
  63. return ""
  64. }
  65. str, err := ioutil.ReadAll(stdout)
  66. cmd.Wait()
  67. if err != nil {
  68. fmt.Println(err)
  69. return ""
  70. }
  71. return string(str)
  72. }
  73. // 执行 lsblk 命令
  74. func ExecLSBLK() []byte {
  75. output, err := exec.Command("lsblk", "-O", "-J", "-b").Output()
  76. if err != nil {
  77. fmt.Println("lsblk", err)
  78. return nil
  79. }
  80. return output
  81. }
  82. // 执行 lsblk 命令
  83. func ExecLSBLKByPath(path string) []byte {
  84. output, err := exec.Command("lsblk", path, "-O", "-J", "-b").Output()
  85. if err != nil {
  86. fmt.Println("lsblk", err)
  87. return nil
  88. }
  89. return output
  90. }
  91. func ExecuteScripts(scriptDirectory string) {
  92. if _, err := os.Stat(scriptDirectory); os.IsNotExist(err) {
  93. fmt.Printf("No post-start scripts at %s\n", scriptDirectory)
  94. return
  95. }
  96. files, err := os.ReadDir(scriptDirectory)
  97. if err != nil {
  98. fmt.Printf("Failed to read from script directory %s: %s\n", scriptDirectory, err.Error())
  99. return
  100. }
  101. for _, file := range files {
  102. if file.IsDir() {
  103. continue
  104. }
  105. scriptFilepath := filepath.Join(scriptDirectory, file.Name())
  106. f, err := os.Open(scriptFilepath)
  107. if err != nil {
  108. fmt.Printf("Failed to open script file %s: %s\n", scriptFilepath, err.Error())
  109. continue
  110. }
  111. f.Close()
  112. scanner := bufio.NewScanner(f)
  113. scanner.Scan()
  114. shebang := scanner.Text()
  115. interpreter := "/bin/sh"
  116. if strings.HasPrefix(shebang, "#!") {
  117. interpreter = shebang[2:]
  118. }
  119. cmd := exec.Command(interpreter, scriptFilepath)
  120. fmt.Printf("Executing post-start script %s using %s\n", scriptFilepath, interpreter)
  121. cmd.Stdout = os.Stdout
  122. cmd.Stderr = os.Stderr
  123. err = cmd.Run()
  124. if err != nil {
  125. fmt.Printf("Failed to execute post-start script %s: %s\n", scriptFilepath, err.Error())
  126. }
  127. }
  128. fmt.Println("Finished executing post-start scripts.")
  129. }