我编写了脚本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>>>>
并且没有收到参数值。
答案 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