Java Runtime.exec () - Argumente auf Linux
Okay also hier ist das problem:
Ich habe 3 Klassen MyClass1 und MyClass2 und ExecClass.
Ich gehe zu meinem Eingabeaufforderung, und tun Sie dies:
$java MyClass1 -exec "java MyClass2 arg1 arg2"
funktioniert perfekt.
Jetzt in ExecClass ich habe die folgende Zeile:
Runtime.getRuntime().exec("java MyClass1 -exec \"java MyClass2 arg1 arg2\"");
Problem ist, wenn Sie drucken Sie die zweite Zeichenfolge, seine genau das gleiche wie die erste, aber wenn meine ExecClass läuft es MyClass1 beschwert sich: Unrecognized argument arg1-und scheitert.
Nach etwas debugging fand ich heraus, dass im ersten Fall, wenn ich den Aufruf direkt aus dem terminal die gesamte Zeichenfolge in Anführungszeichen ist 1 argument (arg[1]), wobei im zweiten Fall werden die arg.Länge = 5 und die im Grunde teilt Sie... für einige unbekannten Grund auf mich zu.
Ich brauche nur zu wissen, dass ein workarround, dass, wenn jemand weiß, aka meine Laufzeit.exec() zu arbeiten.
PS: Auf meinem Windows-Rechner ein solches problem nicht auftreten, nur auf die linux. Es ist ein ubuntu destrution Kernel: 2.6.32-279.14.1.el6.x86_64.
- Siehe auch stackoverflow.com/questions/1410741/... mit der genauen Frage und zwei mögliche Antworten.
- Für Mitleid Willen, beginnen mit
ProcessBuilder
! - Danke für die zusätzliche info, hat Super geklappt. Bin.. ich havent verwendet ProcessBuilder immer, weil ich irgendwie nicht mehr mit java eine Weile her, aber vielleicht schauen Sie es.
- möglich, Duplikat der Verwenden von Anführungszeichen und doppelte Anführungszeichen in der Java Runtime.getRuntime().exec(...)
- Sie können auch ProcessBuilder. stackoverflow.com/a/7134525/2006412
Du musst angemeldet sein, um einen Kommentar abzugeben.
Runtime.exec
im Gegensatz zusystem()
-wie Funktionen in anderen Sprachen nicht aufrufen eines shell-analysieren des Befehls (und double quoted strings sind eine shell-Funktion).Split die Zeichenfolge, wie Sie es wollen, verwenden Sie die Laufzeit.exec, der akzeptiert einen String-array: