运行 使用 java 的 .sh 文件
run a .sh file using java
我想 运行 使用 java 的 .sh 文件。我想打开一个终端,然后我可以在同一个终端中执行另一个命令,最后销毁它。
我已经使用过 ProcessBuilder 但我无法完成此操作。
我的一段代码:
ProcessBuilder pb = new ProcessBuilder("/home/omar/ros_ws/baxter2.sh");
Process p = pb.start();
这个方法以前在别的代码里可以用,不知道为什么在我的代码里不行。
提前致谢
你的程序是否输出错误,或者你的程序没有与文件交互?
我建议尝试使用 ProcessBuilder 中的目录方法。
Process p = null;
ProcessBuilder pb = new ProcessBuilder("baxter2.sh");
pb.directory("/home/omar/ros_ws");
p = pb.start();
如果这不起作用,您还应该查看您尝试访问的文件的用户权限。
你怎么知道它没有执行?也许您只是没有看到它的结果。你应该在执行后得到 p.getInputStream()
并在你的控制台打印,比如:
BufferedReader reader = new BufferedReader(new InputStreamReader(p.getInputStream()));
String line = null;
while ((line = reader.readLine()) != null)
{
System.out.println(line);
}
此外,如果您使用的是 jdk 7+,请尝试:
pb.redirectOutput(Redirect.INHERIT);
pb.redirectError(Redirect.INHERIT);
Process p = pb.start();
我认为您应该使用以下命令将 .sh 文件授予用于 运行 java 程序的 OS 用户的可执行权限。
chmod u+x baxter2.sh
我想 运行 使用 java 的 .sh 文件。我想打开一个终端,然后我可以在同一个终端中执行另一个命令,最后销毁它。 我已经使用过 ProcessBuilder 但我无法完成此操作。 我的一段代码:
ProcessBuilder pb = new ProcessBuilder("/home/omar/ros_ws/baxter2.sh");
Process p = pb.start();
这个方法以前在别的代码里可以用,不知道为什么在我的代码里不行。
提前致谢
你的程序是否输出错误,或者你的程序没有与文件交互?
我建议尝试使用 ProcessBuilder 中的目录方法。
Process p = null;
ProcessBuilder pb = new ProcessBuilder("baxter2.sh");
pb.directory("/home/omar/ros_ws");
p = pb.start();
如果这不起作用,您还应该查看您尝试访问的文件的用户权限。
你怎么知道它没有执行?也许您只是没有看到它的结果。你应该在执行后得到 p.getInputStream()
并在你的控制台打印,比如:
BufferedReader reader = new BufferedReader(new InputStreamReader(p.getInputStream()));
String line = null;
while ((line = reader.readLine()) != null)
{
System.out.println(line);
}
此外,如果您使用的是 jdk 7+,请尝试:
pb.redirectOutput(Redirect.INHERIT);
pb.redirectError(Redirect.INHERIT);
Process p = pb.start();
我认为您应该使用以下命令将 .sh 文件授予用于 运行 java 程序的 OS 用户的可执行权限。
chmod u+x baxter2.sh