2017-12-27 279 views
0

我試圖編寫一個Perl腳本來啓動我的Java程序。使用Cygwin中啓動的perl腳本運行帶有2個參數的Java文件

我試圖使用Cygwin在Windows 10

來執行它的Java程序的主要方法需要兩個參數。

主要方法是這樣的

public static void main(String[] args) throws InterruptedException, IOException 
{ 
    String ipAddress = args[0]; 
    int port = Integer.parseInt(args[1]); 
    ACPCGame acpc1 = new ACPCGame(); 
    acpc1.play(ipAddress, port); 
} 

然後我有我的Perl腳本稱爲canarybot.pl

my @args = ("java", "-jar", "canarybot.jar", "localhost", "55001"); 
system(@args); 

localhost55001應該是兩個參數由Java main方法的預期。

我然後打開包含Perl腳本和jar文件的目錄Cygwin的bash提示符並嘗試這樣

./canarybot.pl 

這將導致錯誤

./canarybot執行它。 pl:line 1:syntax error near unexpected token'('
./canarybot.pl:line 1:my @args =(「java」,「-jar」,「canarybot.jar」,「localhost',」55001 「);

+1

我不是很熟悉cygwin(更多),但是:你的腳本中是否有shebang行('#!/ usr/bin/perl')?並且:當你發出'perl。/ canarybot.pl'時它是否工作? – PerlDuck

+0

我的整個腳本貼在上面。我不知道shebang線是什麼,但現在我會google。 –

+2

shebang行告訴系統使用哪個程序來解釋腳本的其餘部分。在你的情況下,你想'perl'來處理腳本(比如'bash')。嘗試將'#!/ usr/bin/perl'或只是'#!perl'添加到腳本的第一行。 (你顯示的兩條線看起來不錯,順便說一句) – PerlDuck

回答

3

錯誤syntax error near unexpected token是一個shell錯誤。你問Cygwin的shell執行一個Perl程序,當然它使廢話在這方面

您可以使用

perl canarybot.pl 

,或者你可以添加一個 shebang line

#!perl 

到程序的開始,這將導致Cygwin外殼在PATH上查找perl並使用它執行後續代碼,而不是嘗試自行解釋它

但我沒有看到任何理由在這裏使用Cygwin。從Windows cmd提示你可以使用命令

canarybot.pl 

Windows將開始在該文件的當前工作目錄搜索,而將使用註冊表來確定如何處理.pl文件類型。沒有必要在所有

+0

多年前我曾經使用過Cygwin,因爲它有一個帶有tab-tab-tab-completion和其他花哨事物的適當shell。我不關心Windows如何啓動我的腳本,因爲我從Cygwin shell啓動它們。也許OP是用同一個模子鑄造的。 (我不得不查看那個短語;-)) – PerlDuck

+0

如果我從cmd窗口運行canarybot.pl,它將在記事本中打開它:) –

+1

@PerlDuck:最新版本的Windows 10提供了一個bash shell。沒有任何理由使用Cygwin,如果你正在爲Windows開發,那麼你不應該首先假設一個bash shell。 Tribals將堅持認爲你必須假裝你的Windows平臺確實是一個Linux系統,但他們被迷惑了。 – Borodin

0

這是一個shebang行是通過編輯Perl腳本一起使用認領本着對java.exe的文件的具體路徑如下解析:

#!/usr/bin/perl 
my @args = ("/cygdrive/c/Program\ Files/Java/jdk1.8.0_152/bin/java.exe", "-jar", "canarybot.jar", "localhost", "55001"); 
my $ret = system(@args);