Heim >Java >javaLernprogramm >Warum führt „Runtime.exec(String)' manchmal Befehle nicht korrekt aus?
Warum verhält sich Runtime.exec(String) bei bestimmten Befehlen anders?
Runtime.exec(String) ermöglicht die Ausführung von Befehlen in die Umgebung des zugrunde liegenden Betriebssystems. Während es jedoch bei einigen Befehlen reibungslos funktioniert, treten bei anderen Probleme auf.
Warum der Unterschied?
Der Hauptunterschied ergibt sich aus der Tatsache, dass die Befehle nicht ausgeführt werden in einer Shell-Umgebung. Die Shell stellt wesentliche Dienste bereit, die nicht von Runtime.exec(String) ausgeführt werden, was zu Fehlern führt.
Wann tritt ein Fehler auf?
Befehle schlagen fehl, wenn sie darauf angewiesen sind auf Shell-Funktionen, wie zum Beispiel:
Lösungen
Es gibt zwei Ansätze, mit dieser Situation umzugehen:
An eine Shell delegieren (einfach, aber schlampig):
Befehle an eine Shell übergeben (z. B. mit Runtime.exec(String[])):
String myCommand = "cp -R '" + myFile + "' $HOME 2> errorlog"; Runtime.getRuntime().exec(new String[] { "bash", "-c", myCommand });
Übernahme von Shell-Verantwortungen (sicher und robust):
Verwendung von ProcessBuilder zur Handhabung der Shell -ähnliche Aufgaben wie Variablenerweiterung, Umleitung und Wortaufteilung:
String myFile = "some filename.txt"; ProcessBuilder builder = new ProcessBuilder( "cp", "-R", myFile, System.getenv("HOME") ); builder.redirectError(ProcessBuilder.Redirect.to(new File("errorlog"))); builder.start();
Das obige ist der detaillierte Inhalt vonWarum führt „Runtime.exec(String)' manchmal Befehle nicht korrekt aus?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!