2015-08-14 89 views
0

我寫了腳本bash文件,通過它我可以運行java文件並將參數傳遞給此類,但java文件無法識別此參數。 這個SH文件:參數未通過運行java命令行

for Agentid in `seq 1 3`; 
do 
gnome-terminal -x sh -c "java -cp target/classes:../../lib/cafe.jar:target/ddspaxos.jar \ 
paxosdds.PaxosAgent $Agentid ; bash" 
done 

這個這個類的主要功能:

public static void main(String[] args) throws FileNotFoundException, IOException { 
     // création de l'agent Paxos 
     PaxosAgent P = new PaxosAgent(); 
     System.out.println("<<<<<<<<Agent created>>>>>>>>"); 
     System.out.println(args[0]); 
     if (args.length == 1) { 
      // Lecture à partir d'un fichier de configuration 
      AgentId = Integer.parseInt(args[0]); 
      if (AgentId == 1) { 
       isLeader = true; 
       System.out.println("<<<<<<<<i leader>>>>>>>>"); 
       // récuprération des propositions du fichier scénario.txt 
       InputStream ips = new FileInputStream("scenario.txt"); 
       InputStreamReader ipsr = new InputStreamReader(ips); 
       BufferedReader br = new BufferedReader(ipsr); 
       String ligne; 
       while ((ligne = br.readLine()) != null) { 
        parseAndExecuteLine(ligne); 
       } 
       br.close(); 

      } else { 
       isLeader = false; 
      } 

     } 

    } 

腳本運行三個終端,而且只顯示此消息<<<agent created>>>> 和不接收參數值。

+0

嘗試將其更改爲'if(args.length> = 1)'而不是'== 1'。 – RealSkeptic

+0

我做了但沒有改變它沒有收到bash腳本傳遞的參數 –

+0

你可以嘗試'gnome-terminal -x sh -c「echo java -cp target/classes:../../ lib/cafe。 jar:target/ddspaxos.jar \ paxosdds.PaxosAgent $ Agentid >> /tmp/walid.tmp「 –

回答

0

您在上次評論中發佈的腳本失敗,因爲單引號不會展開變量,而java正在接收String $ AgentId,而不是數值。

我不能測試你的例子(沒有GNOME終端安裝),但我嘗試了一個類似的。

測試類:

public class Test { 

    public static void main(final String[] args) { 
     if (args.length == 1) { 
      final int AgentId = Integer.parseInt(args[0]); 
      if (AgentId == 1) { 
       System.out.println("1!"); 
      }else{ 
       System.out.println("not 1!"); 
      } 
     }else{ 
      System.out.println("param not found"); 
     } 
    } 
} 

Shell命令行(它的工作原理):

for id in `seq 1 3`; do 
    sh -c "sh -c \" java -cp . Test ${id} ; sh \" " 
done 

所以我認爲你需要的是這樣的(我不能測試):

for id in `seq 1 3`; do 
    gnome-terminal -x sh -c " java -cp . Test ${id} ; sh " 
done