Ausführen von Shell-Befehlen mit sudo in Go
Beim Ausführen von Befehlen in Go ist es wichtig, die Einschränkungen von exec.Command() zu berücksichtigen. Diese Funktion führt Prozesse direkt aus, während für die Interpretation einiger Befehle möglicherweise ein Shell-Skript erforderlich ist.
exec.Command() und Shell-Befehle
Im angegebenen Code der Befehl Bei der Ausführung handelt es sich um ein komplexes Shell-Skript:
sudo find /folder -type f | while read i; do sudo -S chmod 644 "$i"; done
exec.Command() kann dieses Skript nicht direkt interpretieren, da es die Ausführung eines einzelnen Prozesses erwartet. Um ein Shell-Skript in Go auszuführen, müssen wir einen anderen Ansatz verwenden.
Verwendung von /bin/sh
Eine Lösung ist die Verwendung von /bin/sh ist die Standard-Shell auf Unix-Systemen, um das Skript zu interpretieren. Wir können dies tun, indem wir /bin/sh als erstes Argument an exec.Command() übergeben, gefolgt vom Flag -c, um anzuzeigen, dass wir einen Befehl zur Ausführung übergeben. Zum Beispiel:
cmd := exec.Command("/bin/sh", "-c", "sudo find ...")
Bei diesem Ansatz führt die Shell den als drittes Argument übergebenen Befehl aus, sodass wir Shell-Skripte mit exec.Command() ausführen können.
Umgang mit Ausführungsfehlern
Beim Umgang mit Ausführungsfehlern liefert exec.Command() nur einen generischen „Exit-Status 1“-Fehler Nachricht. Um detailliertere Fehlerinformationen zu erhalten, sollten Sie die Verwendung des Typs exec.ExitError in Betracht ziehen. Dieser Typ bietet Zugriff auf den Exit-Statuscode des Befehls und eine optionale Exit-Nachricht. Zum Beispiel:
if err, ok := err.(*exec.ExitError); ok { fmt.Printf("Exit status: %d\n", err.ExitCode()) if err.ExitCode() == 1 { // Handle exit status 1 error here. } }
Damit können Sie bestimmte Exit-Codes verarbeiten und detailliertere Fehlerinformationen bereitstellen.
Das obige ist der detaillierte Inhalt vonWie kann ich komplexe Shell-Befehle, einschließlich „sudo', in Go sicher ausführen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!