这是我的代码:
String cmd = "bash -c \"php /Users/phyrrus9/Projects/java-web/test.php | say\"";
System.out.println("Executing: " + cmd);
Runtime rt = Runtime.getRuntime();
Process pr = rt.exec(cmd);
然而,它永远不会被执行。我可以从shell运行该命令,它工作正常。 这是test.php的内容
<?php
echo hello;
?>
答案 0 :(得分:1)
Runtime.exec()
不是shell或命令解释器,并且不会以您认为的方式处理您的命令。
exec()的单字符串参数版本在空格上做了一个简单的脑死分裂,所以你的引号和转义引号都没有意义;他们永远不会以你的思维方式来打击它。
始终始终使用其中一位执行String[] cmdarray
在这种情况下你的args是
"bash"
"-c"
"\"php /Users/phyrrus9/Projects/java-web/test.php | say\""
也就是说,您正在运行bash
- 您提供的第一个arg是-c
,第二个arg是字符串。
另请参阅this answer以了解如何Execute external program from Java的更一般性问题。
答案 1 :(得分:0)