创建一个在Go中运行任意shell命令的函数

时间:2015-12-22 13:29:33

标签: bash shell go

我正在尝试在go中创建一个泛型函数,它接受输入shell命令(带参数)并执行它。

请注意,shell命令可能具有不同数量的参数。

我理解Go中的exec.Command()将命令+参数的格式("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",我很难弄清楚如何以一种输入格式的方式形成它需要ie "ls", "-la", "/var"

我还尝试将dummycmd设置为"ls -la /var"的变量,但我认为如果要求将其以上述格式传递给exec.Command则更糟。

思考?

感谢。

1 个答案:

答案 0 :(得分:5)

您可以简单地匹配$scope.objHidShow = {}; $scope.objHidShow.add= false; 函数的参数签名,即

exec.Command

使用可变参数语法将函数参数传递给(name string, arg ...string)

exec.Command

但是请注意,您不是在这里调用shell,因此依赖任何shell内置函数都会失败。