我很難弄清楚如何使用os/exec包運行多個命令。我拖了網和stackoverflow,並沒有發現任何東西適用於我的情況。這裏是我的來源:在同一個shell中運行多個Exec命令golang
package main
import (
_ "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)
}
func folderExists(path string) (bool, error) {
_, err := os.Stat(path)
if err == nil {
return true, nil
}
if os.IsNotExist(err) {
return false, nil
}
return true, err
}
我想要像我從終端的命令。 cd path; ./configure; make
所以我需要按順序運行每個命令,然後等待最後一條命令完成後再繼續。使用我當前版本的代碼,它目前說./configure: no such file or directory
我認爲這是因爲cd路徑執行並在一個新的shell中執行./configure,而不是與前一個命令位於同一個目錄中。有任何想法嗎? UPDATE我通過改變工作目錄,然後執行./configure和make命令
err = os.Chdir(folderPath)
if err != nil {
fmt.Println("File Path Could not be changed")
os.Exit(1)
}
不過現在我很好奇,想知道是否有在同一個shell執行命令的方式來解決這個問題。
謝謝你的回答。我特別感謝你的第一個建議。我偶然發現了你的第二個建議,並且正在使用它。 – reticentroot
@詹姆斯我嘗試了你的建議。 command:= exec.Command(「echo * tar.gz | xargs -n1 tar zxf」) command.Dir = pathFinal cmdErr:= command.Run() 這不適用於我的另一種命令, 命令:=「cd」+ pathFinal +「;」+「echo * tar.gz | xargs -n1 tar zxf」 cmd:= exec.Command(「/ bin/sh」,「-c」,command) This is working 。我想以第一種方式實施它。我不知道它爲什麼不起作用。 – supriya
它引發錯誤: 解壓文件失敗:exec:「echo * tar.gz | xargs -n1 tar zxf」:可執行文件未在$ PATH中找到 – supriya