可変引数を使用したシステム コマンドの実行
特定のシナリオでは、未知の数の引数を使用してシステム コマンドを実行すると、問題が発生する可能性があります。 「ls」や「date」などの単一単語のコマンドはシームレスに機能しますが、より複雑なコマンドはプログラムのエラーを引き起こす可能性があります。この記事では、この問題を解決する解決策を検討します。
Go の os/exec パッケージには、コマンド文字列を入力として受け取る Command() 関数が用意されています。ただし、コマンドに複数の単語または引数が含まれている場合は、エラーが発生します。
そのようなコマンドを実行するには、別の方法として sh コマンドを使用します。 exec.Command("sh", "-c", cmd) を呼び出すと、シェルを使用して指定されたコマンドが実行され、任意の数の引数を持つ複雑なコマンドが可能になります。
さらに、より単純なアプローチも可能です。 Go の可変引数機能を活用することです。可変数の引数を受け入れる関数を定義し、それらを文字列のスライスに割り当てることで、コマンドを次のように実行できます。
func exeCmd(cmd string, wg *sync.WaitGroup) { fmt.Println("command is ", cmd) parts := strings.Fields(cmd) head := parts[0] parts = parts[1:len(parts)] out, err := exec.Command(head, parts...).Output() if err != nil { fmt.Printf("%s", err) } fmt.Printf("%s", out) wg.Done() // Signal completion to waitgroup }
可変個の引数を利用することで、可変数の引数を渡すことができます。これにより、前述の問題が発生することなく、複雑なシステム コマンドの実行が容易になります。
以上がGo で可変数の引数を指定してシステム コマンドを実行するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。