Wenn Sie das exec-Paket verwenden, um Befehle mit Argumenten in doppelten Anführungszeichen unter Windows auszuführen, interpretiert Windows möglicherweise das Anführungszeichen Markierungen als Befehle anstelle von Trennzeichen. Dies kann zu unerwartetem Verhalten und Fehlern führen.
Zum Beispiel versucht das folgende Codefragment, den Suchbefehl mit einem Argument in doppelten Anführungszeichen auszuführen:
out, err := exec.Command("find", `"SomeText"`).Output()
Unter Windows ist dies jedoch der Fall führt dazu, dass der folgende Befehl ausgeführt wird:
find /SomeText"
Die Anführungszeichen werden als Teil des Befehls interpretiert und nicht als Begrenzung des Arguments.
Um dieses Problem zu beheben und die Suche korrekt auszuführen Befehl unter Windows mithilfe des Exec-Pakets ausführen, kann der folgende Ansatz verwendet werden:
<code class="go">package main import ( "fmt" "os" "os/exec" "syscall" ) func main() { cmd := exec.Command(`find`) cmd.SysProcAttr = &syscall.SysProcAttr{} cmd.SysProcAttr.CmdLine = `find "SomeText" test.txt` out, err := cmd.Output() fmt.Printf("%s\n", out) fmt.Printf("%v\n", err) }</code>
In diesem Code wird das Feld SysProcAttr verwendet, um die Befehlszeile für den Prozess explizit festzulegen. Durch Festlegen des Felds „CmdLine“ auf die Suche nach „SomeText“ test.txt wird der Befehl mit intaktem Argument in doppelten Anführungszeichen ausgeführt.
Dieser Ansatz ermöglicht die korrekte Übergabe von Argumenten in doppelte Anführungszeichen an den Befehl, was dazu führt, dass gewünschte Ausführung unter Windows.
Das obige ist der detaillierte Inhalt vonWie führe ich Befehle mit Argumenten in doppelten Anführungszeichen unter Windows mithilfe des exec-Pakets aus?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!