2013-03-16 3 views
-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. Я сожалею об этом глупом вопросе, но я ржав со сценариями в целом и учусь, как писать perl и makefiles в последнее время, чтобы начать экономить время.

Кроме того, когда я искал ответ, в основном я нашел сообщения о том, как запускать perl в java, чего я не хочу делать. Я думал, что это что-то, что я мог бы сделать с perl, но комментарии ниже меня исправили. Я учусь и не буду повторять ту же ошибку. Спасибо за все ваши сообщения. Я буду голосовать и прокомментировать все.

+1

Это не скрипт perl, а сценарий оболочки, который вы хотите. – TLP

+0

Спасибо TLP. Я изучаю. Поэтому я изменю свой вопрос, чтобы отразить это. – GeekyOmega

ответ

1

Perl - это полный язык программирования, такой как Java. Это не лучший выбор для этого. Баурновского сценарий оболочки будет проще:

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

Поскольку вы ответили первым, я дал вам кредит на ответ. Благодарю. – GeekyOmega

+0

На самом деле, другой парень избил меня на несколько секунд, но мой ответ на самом деле дает правильный код (где его нет), а у меня тоже есть улучшенная версия! – ikegami

+0

Добавлен способ открытия в новом окне. – ikegami

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 

Я не знаком с пакетными скриптов, так что я не могу сказать, если три Java-процессы должны выполняться последовательно, ожидая одного, чтобы завершить до начала следующего (что приведенный выше код делает), или запустить в параллели. Если параллельно, добавьте & в конец каждой из трех последних строк.

+0

Существуют ли команды сценария, которые позволяют печатать на отдельном экране терминала? – GeekyOmega

Смежные вопросы