【问题标题】:Inquiry: How to convert this batch file to shell script?查询:如何将此批处理文件转换为shell脚本?
【发布时间】:2013-03-05 09:32:37
【问题描述】:

我收到了一个名为 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 做的事情,但下面的 cmets 纠正了我。我正在学习,不会再犯同样的错误。感谢您的所有帖子。我将对所有人进行投票和评论。

【问题讨论】:

  • 这不是perl脚本,而是你想要的shell脚本。
  • 感谢 TLP。我在学。所以我会修改我的问题以反映这一点。

标签: perl shell


【解决方案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
)

【讨论】:

  • 由于您首先回复,因此我将您的答案归功于您。谢谢。
  • 实际上,另一个人比我快了几秒钟,但我的回答实际上给出了正确的代码(他没有),我的也包括一个改进的版本!
  • 添加了在新窗口中打开的方式。
【解决方案2】:

您所写的与 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 进程是应该顺序运行,等待一个完成后再开始下一个(上面的代码就是这样做的),还是并行运行。如果并行,请在最后三行的每一行末尾添加一个&

【讨论】:

  • 是否有脚本命令可以让您在单独的终端屏幕上打印?
猜你喜欢
  • 1970-01-01
  • 2023-04-09
  • 1970-01-01
  • 1970-01-01
  • 2013-01-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多