2015-08-14 92 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