【发布时间】:2013-02-05 08:44:02
【问题描述】:
我想从我的 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。
【问题讨论】:
-
您希望 myfile.txt 在哪里?你在哪里看/搜索?尝试将文件写入您知道的路径。例如 /tmp/myfile.txt
-
我其实是写在我的项目文件夹
../webapps/test/myfile.txt. -
您尝试过 Runtime 吗? Runtime.getRuntime().exec("echo HELLO > myfile.txt");
-
试过这个:ProcessBuilder pb = new ProcessBuilder("bash", "-c", "echo HELLO > myfile.txt");
-
如需尽快获得更好的帮助,请发帖SSCCE。
标签: java bash unix servlets processbuilder