-1

我收到了一个名为 make.bat 的批处理文件,其中包含以下信息:

javac Node.java
javac PhysServer.java
start java Physerver topology.txt 8080
start java Node A localhost 8080
start java Node B localhost 8080

由于我运行 OSX 和 linux,我无法运行批处理文件。因此,我如何将其重写为 perl 脚本并在终端中运行?我在下面尝试了以下操作,但它崩溃了:

#!/user/bin/perl  
javac Node.java
javac PhysServer.java
start java Physerver topology.txt 8080
start java Node A localhost 8080
start java Node B localhost 8080

我得到的错误是:

Number found where operator expected at ./make2.pl line 5, near "txt 8080"
    (Do you need to predeclare txt?)

我还怀疑我应该删除java前面的“start”并调用java命令。对于这个愚蠢的问题,我感到很抱歉,但我对脚本很生疏,最近一直在自学如何编写 perl 和 makefile 以开始节省时间。

另外,当我一直在寻找答案时,我发现大多数帖子都在谈论如何在 java 中运行 perl,这是我不想做的事情。我认为这是我可以用 perl 做的事情,但下面的评论纠正了我。我正在学习,不会再犯同样的错误。感谢您的所有帖子。我将对所有人进行投票和评论。

4

2 回答 2

1

你所写的更像是 shell 脚本,而不是 Perl。

#!/bin/sh

javac Node.java
javac PhysServer.java
java Physerver topology.txt 8080
java Node A localhost 8080
java Node B localhost 8080

我对批处理脚本不熟悉,所以我不知道这三个 Java 进程是应该顺序运行,等待一个完成后再开始下一个(上面的代码就是这样做的),还是并行运行。如果并行,&在最后三行的每一行的末尾添加一个。

于 2013-03-16T19:01:40.603 回答
1

Perl 是一种类似于 Java 的完整编程语言。这不是最好的选择。一个 bourne shell 脚本会更容易:

#!/bin/sh
javac Node.java
javac PhysServer.java
java Physerver topology.txt 8080 &
java Node A localhost 8080 &
java Node B localhost 8080 &

如果要添加错误检查,

#!/bin/sh
javac Node.java &&
javac PhysServer.java && (
   java Physerver topology.txt 8080 &
   java Node A localhost 8080 &
   java Node B localhost 8080 &
)

在评论中,您表示要在新窗口中启动每个服务器。我不是 OS X 用户,所以我必须查一下。另一个答案表明

#!/bin/sh
pwd="`pwd`"

javac Node.java &&
javac PhysServer.java && (
   osascript -e "tell application \"Terminal\" to do script \"cd \\\"$pwd\\\"; clear; java Physerver topology.txt 8080\"" >/dev/null
   osascript -e "tell application \"Terminal\" to do script \"cd \\\"$pwd\\\"; clear; java Node A localhost 8080\"" >/dev/null
   osascript -e "tell application \"Terminal\" to do script \"cd \\\"$pwd\\\"; clear; java Node B localhost 8080\"" >/dev/null
)
于 2013-03-16T19:01:55.630 回答