-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

あなたが書いたものは、Perl よりもはるかにシェル スクリプトに似ています。

#!/bin/sh

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

私はバッチ スクリプトに詳しくないので、3 つの Java プロセスを順番に実行して、1 つのプロセスが完了するのを待ってから次のプロセスを開始するか (上記のコードで実行)、並列に実行する必要があるかどうかわかりません。並列の場合は&、最後の 3 行のそれぞれの末尾に an を追加します。

于 2013-03-16T19:01:40.603 に答える
1

Perl は Java のような完全なプログラミング言語です。これは最良の選択ではありません。Bourne シェル スクリプトの方が簡単です。

#!/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 に答える