我正在嘗試在 go 中創建一個通用函數,該函數接受輸入的 shell 命令(帶參數)并執行它。請注意,shell 命令可能具有不同數量的參數。我知道exec.Command()in Go 將("ls", "-la", "/var")命令 + 參數的格式作為輸入。下面截斷的這段代碼不起作用:func exe_cmd(commandarray []string) {var shell_command string = ""for i := 0; i < len(commandarray); i++ { shell_command = shell_command + " " + commandarray[i] }cmd := exec.Command(shell_command)fmt.Println("Command is: ", shell_command)fmt.Printf("==> Executing: %s\n", strings.Join(cmd.Args, " "))out, err := cmd.Output()fmt.Printf("OutVar: %s\n", out)fmt.Printf("ErrVar: %s\n", err)}func dummy() {dummycmd := []string{"ls", "-la", "/var"}exe_cmd(dummycmd)}在的結束for的shell_command變量將包含"ls -la /var",我有一個很難弄清楚如何形成它的方式,就是輸入格式要求,即"ls", "-la", "/var"我也嘗試將其設置dummycmd為變量,"ls -la /var"但我認為如果要求以上述格式將其傳遞給 exec.Command 則情況更糟。想法?
1 回答

qq_笑_17
TA貢獻1818條經驗 獲得超7個贊
您可以簡單地匹配exec.Command函數的參數簽名,即
(name string, arg ...string)
并使用可變參數語法將函數參數傳遞給 exec.Command
func execCmd(name string, args ...string) {
cmd := exec.Command(name, args...)
fmt.Printf("Command is: %s, %s", name, args)
out, err := cmd.Output()
fmt.Printf("OutVar: %s\n", out)
fmt.Printf("ErrVar: %s\n", err)
}
但是請注意,您沒有在此處調用 shell,因此依賴任何內置的 shell 都會失敗。
- 1 回答
- 0 關注
- 235 瀏覽
添加回答
舉報
0/150
提交
取消