입력 리디렉션이 포함된 exec.Command
Go에서 bash 명령을 실행하기 위해 exec.Command()가 간단한 솔루션을 제공합니다. 그러나 입력을 명령으로 리디렉션하는 것은 어려울 수 있습니다.
"/sbin/iptables-restore < /etc/iptables.conf" 명령을 사용하여 IPTables를 업데이트해야 한다는 점을 고려하세요. exec.Command()를 사용하여 이 명령을 호출하려는 시도는 실패했습니다.
이 문제를 해결하기 위해 cmd.StdinPipe()에 대한 입력으로 파일 이름을 제공하는 전략이 사용되었습니다.
stdin, err := cmd.StdinPipe() if err != nil { log.Fatal(err) } err = cmd.Start() if err != nil { log.Fatal(err) } io.WriteString(stdin, "/etc/iptables.conf")
그러나 이 접근 방식은 여전히 효과적이지 않았습니다. 실행 가능한 솔루션은 "/etc/iptables.conf"의 내용을 읽고 이를 cmd.StdinPipe()에 쓰는 것입니다:
package main import ( "io" "io/ioutil" "log" "os/exec" ) func main() { bytes, err := ioutil.ReadFile("/etc/iptables.conf") if err != nil { log.Fatal(err) } cmd := exec.Command("/sbin/iptables-restore") stdin, err := cmd.StdinPipe() if err != nil { log.Fatal(err) } err = cmd.Start() if err != nil { log.Fatal(err) } _, err = io.WriteString(stdin, string(bytes)) if err != nil { log.Fatal(err) } }
위 내용은 Go에서 'iptables-restore'와 같은 명령에 대해 입력을 'exec.Command'로 올바르게 리디렉션하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!