亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

在同一個 shell golang 中運行多個 Exec 命令

在同一個 shell golang 中運行多個 Exec 命令

Go
胡說叔叔 2021-11-29 19:19:53
我無法弄清楚如何使用 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

......然后像以前一樣繼續。


查看完整回答
反對 回復 2021-11-29
  • 1 回答
  • 0 關注
  • 287 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號