2012-04-04 19 views
2

Ich habe Probleme beim Trennen von zwei String-Variablen als Argumente für ein Bash-Skript. Meine Bash-Skript nimmt zwei Argumente wie folgt:Bash-Skript mit mehreren String-Argumenten

#!/bin/bash 


DATA1=$1 
DATA2=$2 

jedoch DATA1 und DATA2 sind nicht das, was ich wollte, weil bash meine Saiten liest falsch. DATA2 ist nur der erste Teil des Arguments, das ich einfügen wollte, weil ich Schwierigkeiten habe, eine komplizierte (relativ) Zeichenfolge in einen einzigen Argument zu machen.

Ich nenne dieses Skript aus einer Java-Anwendung mit Variablen wie folgt aus:

String m1 = "some data"; 
String m2 = "some more"+mystring+"even more data"+anotherstring; 


myscript.sh m1 m2 

Nur der erste Teil von m2 auf DATA1 in der Bash-Skript übergeben. Ich habe versucht, das Ganze in einfache Anführungszeichen und doppelte Anführungszeichen zu schreiben. Ich kann es nicht als ganzes Argument betrachten, das ganze m2 als zweites Argument zu akzeptieren.

Jede Hilfe beim Erstellen von zwei String-Argumenten wird geschätzt.

+4

ich glaube, das Problem ist eher auf dem Java-Ende sein als auf dem Bash Ende. Wie starten Sie das Skript? – ruakh

+6

Sie müssen den EXACT-Code anzeigen, den Sie verwenden, um das Skript von Java aufzurufen ('Runtime.exec()' ?, 'ProcessBuilder'?), Einschließlich des Codes, der die Argumente einrichtet. Sonst raten wir nur. –

+0

erster Teil von m2 wird an DATA1 übergeben? meinst du, der erste teil von m2 wird an DATA2 weitergegeben? – Alvin

Antwort

0

Es funktioniert für mich finden Sie unter:

Runtime.getRuntime().exec(new String[]{"/bin/sh", "/tmp/myscript.sh", m1,m2}); 

Ihr Code ruft: Runtime.getRuntime().exec(String)

Es ruft Methode exec(command,null,null) (Quellcode in src.zip sehen) exec(String command, String[] envp, File dir).

Methode exec (String Befehl, String [] envp, Datei dir) parse Befehl von StringTokenizer. So Text "some data" oder "\"some data\""-somedata aufgeteilt wird (oder "somedata ")