我试图在go中创建一个泛型函数,它接受输入shell命令(带参数)并执行它.
请注意,shell命令可能具有不同数量的参数.
我知道exec.Command()
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则更糟.
思考?
谢谢.
您可以简单地匹配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内置函数都会失败.