我正在尝试编写一个Perl脚本来启动我的Java程序。
我正在尝试在Windows 10中使用Cygwin执行它。
Java程序的main方法需要两个参数。
主要方法如下所示
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);
localhost
和55001
应该是Java main方法所期望的两个参数。
然后我在包含Perl脚本和jar
文件的目录中打开一个Cygwin bash提示符,并尝试像这样执行它
./canarybot.pl
这会导致错误
./ canarybot.pl:第1行:意外令牌附近的语法错误'(' ./canarybot.pl:line 1:my @args =(“java”,“ - jar”,“canarybot.jar”,“localhost”,“55001”);
答案 0 :(得分:3)
错误syntax error near unexpected token
是一个shell错误。你问Cygwin shell执行一个Perl程序,当然它在那个上下文中是无意义的
您可以使用
perl canarybot.pl
或者你可以添加一个 shebang line
#!perl
到程序的开头,这将导致Cygwin shell在PATH上查找perl
并使用它来执行后续代码,而不是试图自己解释它
但是我没有看到任何理由在这里使用Cygwin。在Windows cmd
提示符下,您可以使用命令
canarybot.pl
Windows将开始在当前工作目录中搜索该文件,并且它将使用注册表来确定如何处理.pl
文件类型。根本不需要shebang线
答案 1 :(得分:0)
通过编辑Perl脚本以使用shebang行以及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);