可変引数を使用したシステム コマンドの実行
複数の引数を含むシステム コマンドを実行する場合は、コマンドと引数を分離する必要があります。以下のコードは、この概念を示しています。
import ( "fmt" "os/exec" "strings" "sync" ) func exeCmd(cmd string, wg *sync.WaitGroup) { fmt.Println("command is ", cmd) // Splitting head (e.g., "g++") from the rest of the command (e.g., "-c file.cpp") 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 to waitgroup that this goroutine is done } func main() { wg := new(sync.WaitGroup) wg.Add(3) x := []string{ "echo newline >> foo.o", "echo newline >> f1.o", "echo newline >> f2.o"} go exeCmd(x[0], wg) go exeCmd(x[1], wg) go exeCmd(x[2], wg) wg.Wait() }
このコード内:
このアプローチを使用すると、プログラムはシステム コマンドを実行できます。任意の数の引数。これにより、複数の単語を含むコマンドが失敗するという元のコードの制限が克服されます。
以上がGo で変数引数を使用してシステムコマンドを安全に実行するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。