查询:如何将此批处理文件转换为shell脚本?

时间:2013-03-16 18:49:50

标签: perl shell

我收到了一个名为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和makefiles以便开始节省时间。

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

2 个答案:

答案 0 :(得分: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进程是否应该按顺序运行,等待一个Java进程在开始下一个(上面的代码执行)之前完成,或者并行运行。如果并行,则在最后三行的每一行的末尾添加&

答案 1 :(得分: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用户,所以我不得不查阅它。另一个answer建议

#!/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
)