我想从我的 Java servlet 执行一个简单的 Unix 命令:我需要做的是一个简单的回显写入文件,如下所示:
echo HELLO > myfile.txt
我在我的 servlet 中所做的是:
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class ServletAutorecovery extends HttpServlet {
protected void processRequest(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setContentType("text/html;charset=UTF-8");
PrintWriter out = response.getWriter();
try {
ProcessBuilder pb = new ProcessBuilder("/usr/bin/bash", "-c", "echo HELLO > ../webapps/test/myfile.txt");
pb.start();
} finally {
out.close();
}
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
processRequest(request, response);
}
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
processRequest(request, response);
}
}
我的问题是:此代码部分没有给我任何错误,但没有任何反应。在我执行了我的 servlet 之后,该文件并没有被创建,当然,其中也没有写入任何内容。
我究竟做错了什么?
EDIT1:添加了 pb 命令的完整路径。
EDIT2:bash
在路径/usr/bin/bash
中,100% 确定。
EDIT3:添加了 SSCCE。