使用在Cygwin中启动的perl脚本运行带有2个args的Java文件

问题描述 投票:0回答:2

我正在尝试编写一个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);

localhost55001应该是Java主要方法所期望的两个参数。

然后我在包含Perl脚本和jar文件的目录中打开一个Cygwin bash提示符,并尝试像这样执行它

./canarybot.pl

这导致错误

./canarybot.pl:line 1:意外令牌附近的语法错误'(' ./canarybot.pl:line 1:my @args =(“java”,“ - jar”,“canarybot.jar”,“localhost”,“55001”);

java perl cygwin
2个回答
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线


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);
© www.soinside.com 2019 - 2024. All rights reserved.