使用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}'
但没有成功。
还有其他建议吗?
由于
答案 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\"'
}
);