我無法弄清楚如何使用 os/exec 包運行多個命令。我已經瀏覽了網絡和 stackoverflow,但沒有找到任何適合我的案例。這是我的來源:package mainimport ( _ "bufio" _ "bytes" _ "errors" "fmt" "log" "os" "os/exec" "path/filepath")func main() { ffmpegFolderName := "ffmpeg-2.8.4" path, err := filepath.Abs("") if err != nil { fmt.Println("Error locating absulte file paths") os.Exit(1) } folderPath := filepath.Join(path, ffmpegFolderName) _, err2 := folderExists(folderPath) if err2 != nil { fmt.Println("The folder: %s either does not exist or is not in the same directory as make.go", folderPath) os.Exit(1) } cd := exec.Command("cd", folderPath) config := exec.Command("./configure", "--disable-yasm") build := exec.Command("make") cd_err := cd.Start() if cd_err != nil { log.Fatal(cd_err) } log.Printf("Waiting for command to finish...") cd_err = cd.Wait() log.Printf("Command finished with error: %v", cd_err) start_err := config.Start() if start_err != nil { log.Fatal(start_err) } log.Printf("Waiting for command to finish...") start_err = config.Wait() log.Printf("Command finished with error: %v", start_err) build_err := build.Start() if build_err != nil { log.Fatal(build_err) } log.Printf("Waiting for command to finish...") build_err = build.Wait() log.Printf("Command finished with error: %v", build_err)}我想像從終端一樣執行命令。 cd path; ./configure; make 所以我需要按順序運行每個命令并在繼續之前等待最后一個命令完成。使用我當前版本的代碼,它目前說./configure: no such file or directory我認為這是因為 cd path 執行并在新的 shell 中執行 ./configure,而不是在上一個命令的同一目錄中。有任何想法嗎? 更新我通過更改工作目錄然后執行 ./configure 和 make 命令解決了這個問題err = os.Chdir(folderPath) if err != nil { fmt.Println("File Path Could not be changed") os.Exit(1) }現在我仍然很想知道是否有辦法在同一個 shell 中執行命令。
1 回答

紅顏莎娜
TA貢獻1842條經驗 獲得超13個贊
如果要在單個 shell 實例中運行多個命令,則需要使用以下內容調用 shell:
cmd := exec.Command("/bin/sh", "-c", "command1; command2; command3; ...")
err := cmd.Run()
這將使 shell 解釋給定的命令。它還可以讓您執行 shell 內置函數,例如cd. 請注意,以安全的方式將用戶數據替換為這些命令可能并非易事。
相反,如果您只想在特定目錄中運行命令,則可以在沒有 shell 的情況下執行此操作。您可以設置當前工作目錄以執行命令,如下所示:
config := exec.Command("./configure", "--disable-yasm")
config.Dir = folderPath
build := exec.Command("make")
build.Dir = folderPath
......然后像以前一樣繼續。
- 1 回答
- 0 關注
- 287 瀏覽
添加回答
舉報
0/150
提交
取消