-3

使用 Java 的 runtime.exec(cmd) 在 HP-UX unix 上运行 perl 字符串然后得到错误

Can't find string terminator "'" anywhere before EOF at -e line 1.

我正在测试的 perl 脚本是:

perl -e 'print "Hello World \n"'

它在 Unix 命令行下工作。尝试了许多转义变体并尝试使用qq,就像perl -e 'print qq{Hello World \n}'没有成功一样。

还有其他建议吗?

谢谢

4

1 回答 1

1

使用 时Runtime.exec(String command),“使用空格作为分隔符解析字符串”。这意味着

perl -e 'print "Hello World\n"'

告诉 Java 执行以下操作:

program: perl
1st arg: -e
2nd arg: 'print
3rd arg: "Hello
4th arg: World\n"'

-e( )后面的 arg'print是要执行的 Perl 代码。这显然是不正确的。您要执行以下操作:

program: perl
1st arg: -e
2nd arg: print "Hello World\n"

您可以使用exec(String[] cmdarray).

Runtime.getRuntime().exec(
   new String[] {
      "perl",
      "-e",
      "print \"Hello World\\n\""
   }
);

或者您可以调用一个 shell 来为您解析命令:

Runtime.getRuntime().exec(
   new String[] {
      "sh",
      "-c",
      "perl -e 'print \"Hello World\\n\"'
   }
);
于 2013-10-16T18:04:13.877 回答