通过提供脚本位置的相对路径从 Java 调用 shell 脚本
Calling shell script from Java by giving a relative path of script location
我正在做一个项目,其中我必须调用存储在我的 java 文件 reside.I 当前调用 shell 脚本的位置的 shell 脚本通过提供硬编码(绝对)路径。我想通过提供相对路径来制作我的脚本运行。目前我正在运行通过此代码在 Java:
try {
ProcessBuilder pb2 = new ProcessBuilder("/bin/bash", "/Users/umang/Documents/script.sh", arg);
Process scriptexec = pb2.start();
scriptexec.waitFor();
} catch (Exception e) {
e.printStackTrace();
}
这里的 arg 是脚本 runs.The 当前实现运行良好的文件位置,但问题是我必须将我的脚本存储在 server.Its webapp 的某个位置通过制作 war 文件部署在 apache-tomcat 服务器上。最好有一个相对路径,并在生成脚本时将脚本存储在 war 文件中。
尝试 #1:
final File executorDirectory = new File("A/B/C/D/E/F/G/H/");
try {
ProcessBuilder pb2 = new ProcessBuilder("/bin/bash","combiner.sh",arg);
pb2.directory(executorDirectory);
Process scriptexec = pb2.start();
scriptexec.waitFor();
System.out.println("Script executed successfully");
} catch (Exception e) {
e.printStackTrace();
}
A/B/C/D/E/F/G/H/ 我的脚本位于应用程序顶部的位置
错误:找不到文件错误 -2 JavaIOException()
尝试 #2
URL loc=ClassLoader.getSystemResource("script.sh");
try {
ProcessBuilder pb2 = new ProcessBuilder("/bin/bash", "/Users/umang/Documents/script.sh", arg);
Process scriptexec = pb2.start();
scriptexec.waitFor();
} catch (Exception e) {
e.printStackTrace();
}
错误:loc 没有给我脚本的路径 location.In 我发现它的调试器工具为空。
由于 ClassLoader.getSystemResource returns a URL 和 ProcessBuilder 只接受字符串,我不能直接附加它们。
如果在 tomcat 中部署,请尝试将您的脚本放入 war 的 WEB-INF 中。现在假设您从可以使用的 servlet 启动该过程
ServletContext ctx = getContext();
String pathForProcessBuilder = ctx.getRealPath("/WEB-INF/script.sh");
如果您不想使用 ServletContext,请尝试使用
getClass().getClassLoader().getResource("/WEB-INF/script.sh")
而不是使用 ClassLoader
(为了确保您使用 "correct" classloader,即加载您的 class 的那个)
我正在做一个项目,其中我必须调用存储在我的 java 文件 reside.I 当前调用 shell 脚本的位置的 shell 脚本通过提供硬编码(绝对)路径。我想通过提供相对路径来制作我的脚本运行。目前我正在运行通过此代码在 Java:
try {
ProcessBuilder pb2 = new ProcessBuilder("/bin/bash", "/Users/umang/Documents/script.sh", arg);
Process scriptexec = pb2.start();
scriptexec.waitFor();
} catch (Exception e) {
e.printStackTrace();
}
这里的 arg 是脚本 runs.The 当前实现运行良好的文件位置,但问题是我必须将我的脚本存储在 server.Its webapp 的某个位置通过制作 war 文件部署在 apache-tomcat 服务器上。最好有一个相对路径,并在生成脚本时将脚本存储在 war 文件中。
尝试 #1:
final File executorDirectory = new File("A/B/C/D/E/F/G/H/");
try {
ProcessBuilder pb2 = new ProcessBuilder("/bin/bash","combiner.sh",arg);
pb2.directory(executorDirectory);
Process scriptexec = pb2.start();
scriptexec.waitFor();
System.out.println("Script executed successfully");
} catch (Exception e) {
e.printStackTrace();
}
A/B/C/D/E/F/G/H/ 我的脚本位于应用程序顶部的位置 错误:找不到文件错误 -2 JavaIOException()
尝试 #2
URL loc=ClassLoader.getSystemResource("script.sh");
try {
ProcessBuilder pb2 = new ProcessBuilder("/bin/bash", "/Users/umang/Documents/script.sh", arg);
Process scriptexec = pb2.start();
scriptexec.waitFor();
} catch (Exception e) {
e.printStackTrace();
}
错误:loc 没有给我脚本的路径 location.In 我发现它的调试器工具为空。
由于 ClassLoader.getSystemResource returns a URL 和 ProcessBuilder 只接受字符串,我不能直接附加它们。
如果在 tomcat 中部署,请尝试将您的脚本放入 war 的 WEB-INF 中。现在假设您从可以使用的 servlet 启动该过程
ServletContext ctx = getContext();
String pathForProcessBuilder = ctx.getRealPath("/WEB-INF/script.sh");
如果您不想使用 ServletContext,请尝试使用
getClass().getClassLoader().getResource("/WEB-INF/script.sh")
而不是使用 ClassLoader
(为了确保您使用 "correct" classloader,即加载您的 class 的那个)