2010-11-19 24 views
1

Bir argüman geçen benim java programında bir kabuk komut dosyası yürütme isteyen argümanlarla başka java programa diyoruz bash komut java programını oluşturan feryat gösterdi:Geçme argümanlar

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

Ve test.sh arayacak böyle bir dize argümanı geçen başka java programı: Bu biçimde argümanı yorumlayacaktır anther.jar

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

ve son olarak programın

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

biraz ben ilk komuta bazı dizeleri biçimleri denedim ama doğru formu alamadım bu situation..kkk

yılında kaçar karakterleri ile düzgün başa çıkamaz bu aldığım bir karıştırmayın değilim.

Bazı yardımlar iyi olacak!

Thx!

+0

Neden başlamak için argümanlar etrafında tırnak gerekiyor program2.java olarak

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

? Hedef .jar, argümanlarının etrafında tırnak bekliyor? – birryree

cevap

3

exec(String cmd) yerine exec(String[] cmdarray)'u kullanmanız daha iyi olur. Bunun nedeni, exec(String cmd)'un argümanları StringTokenizer aracılığıyla belirlemesidir, bu da komut satırı argümanlarını koparırken çift tırnak işaretine hiç dikkat etmemesidir. Böyle

deneyin şey: param değerlerinin iç

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); 

Karakterler Java kaynak kodu dize hazır kaçan gerektirebilir sürece dışında alıntı ya kaçan gerekmez.

+0

Komutu bir dizgedeki parametreyle birlikte iletmem gerekiyor ... ama öneri Mike'ı takdir ediyorum! Teşekkürler! – Bera

+0

Anladım! msgstr ""/\ " \\ "" + \t \t "\" \ ""; – Bera

5

ProcessBuilder'u kullanın. Parametrelerle yapılması gereken özel bir şey yok, sadece göz atarlar. test.sh olarak

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

:

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

Thans çok fazla Jonathon. Ama sh programın yolunu değiştiremiyorum veya diğer java app argümanını almak mümkün değil. Sadece bir argüman aktarılmalıdır. Thx – Bera

+0

@Bera Cevabı güncelledim - gösterildiğin gibi denersen ne olur? Argümanları tek bir parametre olarak göndermesini beklerdim. –