2016-07-14 4 views
4

Я пытаюсь выполнить команду, используя go.Golang: Выполнение команды с ее аргументами

executableCommand := strings.Split("git commit -m 'hello world'", " ") 
executeCommand(executableCommand[0], executableCommand[1:]...) 
cmd := exec.Command(command, args...) 

Но вот что я получаю

error: pathspec 'world"' did not match any file(s) known to git. 
exit status 1 

Это происходит потому, что -m получает 'hello только и не 'hello world' с командной строки расщепляется с помощью " ".

Любая идея заставить его работать?

ответ

8

То, чего вы хотите, на самом деле трудно достичь без помощи оболочки, которая интерпретирует кавычки и т. Д. Таким образом, вы можете использовать shell для запуска вашей команды.

exec.Command("sh", "-c", "echo '1 2 3'") 
2

Как насчет избежать кавычки, а затем использовать функцию strconv.Unquote?

executableCommand := strings.Split(strconv.Unquote("git commit -m \"hello world\"", " ")) 
executeCommand(executableCommand[0], executableCommand[1:]...) 
cmd := exec.Command(command, args...) 

Конечно, это будет отличаться от того, как оболочка интерпретирует цитаты.

Вот короткая демонстрация:

https://play.golang.org/p/V6uqWcczGV