在-e第1行的EOF之前的任何地方都找不到字符串终结符“'”

时间:2013-10-16 17:39:09

标签: java perl unix

使用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}'但没有成功。

还有其他建议吗?

由于

1 个答案:

答案 0 :(得分: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'print)之后的arg是要执行的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\"'
   }
);