2010-11-19 2 views
1

Ich möchte ein Shell-Scripting in meinem Java-Programm Führen eines Argument zeigte Faltenbalg Ausführung:Passing Argumente bilden Java-Programm zu Bash-Skript, das eine andere Java-programa nennen mit den Argumenten

Runtime.getRuntime().exec("./test.sh " + "\\\"param1\\\"\\\"param2\\\"\\\"param3\\\""); 

Und die test.sh rufen ein anderes Java-Programm des String-Argument wie folgt übergeben:

another.jar \"param1\"\"param2\"\"param3\" 

und schließlich das Programm anther.jar das Argument in diesem Format interpretiert

another.jar "param1""param2""param3" 

Ich bin ein bisschen mit diesem bacause verwechselt ich nicht richtig mit entkommt Zeichen in diesem situation..kkk

Ich habe versucht, ein paar Texte, Formate in dem ersten Befehl umgehen kann, aber ich habe nicht die richtige Form zu bekommen.

werden einige Hilfe in Ordnung sein!

Thx!

+0

Warum Sie Anführungszeichen um Ihre Argumente müssen beginnen? Erwartet das Ziel .jar Zitate um seine Argumente? – birryree

Antwort

3

ich glaube, Sie wäre besser dran mit exec(String[] cmdarray) statt exec(String cmd). Dies liegt daran, dass exec(String cmd) die Argumente über StringTokenizer in Token zerlegt, was bei der Aufschlüsselung der Befehlszeilenargumente keinerlei Aufmerksamkeit auf doppelte Anführungszeichen legt.

versuchen, etwas wie folgt aus:

ArrayList<String> argList = new ArrayList<String>(); 
argList.add("param1"); 
argList.add("param2"); 
argList.add("param2"); 
String[] args = argList.toArray(new String[argList.size()]); 
Runtime.getRuntime().exec("mycommand", args); 

Charaktere innerhalb der param Werte müssen nicht zitieren oder zu entkommen, außer insofern, als Java-Quellcode Stringliterale erfordern kann entkommen.

+0

Ich muss den Befehl zusammen mit Parameter in einer Zeichenfolge übergeben ... aber ich schätze Ihren Vorschlag Mike! Vielen Dank! – Bera

+0

Ich habe! "./command.sh \ "\"" + "\\\\\\\" PARAM_1 \\\\\\\ "" + \t \t "\\\\\\\" PARAM_2 \\\\\ \\ "" + \t \t "\" \ ""; – Bera

5

Verwendung ProcessBuilder. Mit den Parametern muss nichts Besonderes gemacht werden, sie werden einfach durchdringen.

//ProcessBuilder pb = new ProcessBuilder("test.sh", "param1", "param2", "param3"); 
ProcessBuilder pb = new ProcessBuilder("test.sh", "param1 " + "param2 " + "param3"); 
pb.start(); 

In test.sh:

java -jar program2 $1 # Or however you want to call it. 

In program2.java

public static void main(String[] args) 
{ 
    System.out.println(args[0]); 
} 
+0

Thans so viel Jonathon. Aber ich bin nicht in der Lage, den Weg des SH-Programms zu ändern oder die andere Java-App erhalten das Argument. Ist nur ein Argument zu übertragen. Thx – Bera

+0

@Bera Ich habe die Antwort aktualisiert - was passiert, wenn Sie es wie gezeigt versuchen? Ich würde erwarten, dass die Argumente als ein einziger Parameter gesendet werden. –