代码之家  ›  专栏  ›  技术社区  ›  Steve W

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

  •  0
  • Steve W  · 技术社区  · 7 年前

    我正试图编写一个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脚本的目录中打开Cygwin bash提示符,并 jar 并尝试这样执行它

    ./canarybot.pl
    

    这会导致错误

    ./金丝雀。pl:第1行:意外标记“(”附近的语法错误
    ./金丝雀。pl:第1行:my@args=(“java”,“-jar”,“canarybot.jar”,“localhost”,“55001”);

    2 回复  |  直到 7 年前
        1
  •  3
  •   Borodin    7 年前

    错误 syntax error near unexpected token 是shell错误。您要求Cygwin shell执行一个Perl程序,当然在这种情况下这是毫无意义的

    您可以使用

        perl canarybot.pl
    

    或者您可以添加 shebang line

    #!perl
    

    在程序开始时,这将导致Cygwin shell查找 perl 并使用它来执行后续代码,而不是试图解释它本身

    但我看不出有任何理由在这里使用Cygwin。从窗口 cmd 提示您可以使用命令

    canarybot.pl
    

    Windows将开始在当前工作目录中搜索文件,它将使用注册表来确定如何处理 .pl 文件类型。根本不需要一条shebang线路

        2
  •  0
  •   Steve W    7 年前

    通过编辑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);