参数未传递运行java命令行

时间:2015-08-14 18:13:22

标签: java bash sh

我编写了脚本bash文件,通过它我可以运行java文件并将参数传递给这个类,但java文件不能识别这个参数。 这个sh文件:

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>>>> 并且没有收到参数值。

1 个答案:

答案 0 :(得分:0)

您在上次评论中发布的脚本失败,因为单引号不会扩展变量而java正在接收字符串$ AgentId,而不是数字值。

我无法测试你的例子(没有安装gnome-terminal)但我尝试使用类似的。

测试类:

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