2016-07-14 11 views
4

goを使用してコマンドを実行しようとしています。Golang:引数を指定してコマンドを実行する

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

しかし、ここで私は、コマンドラインが" "を使用して分割されているので-m'helloだけではなく'hello world'を取得するためです

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

を得るものです。

それを動作させるにはどんな考えですか?

答えて

8

あなたが望むものは、引用符などを解釈するシェルの助けがなければ達成するのは実際には難しいので、シェルを使用してコマンドを実行することができます。

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

関連する問題