java - 无法为 Java 进程设置 LD_LIBRARY_PATH

标签 java linux dll csh

我正在尝试从 shell 脚本调用我的 linux 可执行文件。在调用这个可执行文件之前,我想用特定的值设置 LD_LIBRARY_PATH。我的 shell 脚本如下:

Parent.sh(包含2行)

   - source set_env.sh 
   - executable.so

设置环境.sh

   - setenv LD_LIBRARY_PATH /proj/something

在从 linux 控制台手动执行 Parent.sh scipt 时,可执行文件 .so 会在正确设置 LD_LIBRARY_PATH 的情况下被调用。但是在将它与 java 代码集成为:

String[] commandArray ={"Parent.sh"};
Runtime runtime = Runtime.getRuntime();
Process javap = runtime.exec(commandArray);
javap.waitFor();

没有为可执行文件设置 LD_LIBRARY_PATH。所以

我希望描述清楚:)

请告知代码中的错误。

最佳答案

Dunes 答案可以解决您的问题,但我强烈建议在这种特殊情况下采用不同的方法。您应该在 Java 代码中执行此操作,而不是依赖 shell 来设置环境参数。这样您就不需要知道系统上存在哪些 shell 以及它们的语言是什么,它将适用于所有平台。

为此,您可以使用 Runtime.exec(String[] cmd, String[] environment) 重载 ( javadoc )。作为第二个参数,您可以传递一个数组,其中包含子进程将看到的所有环境变量。

甚至更好一点的是 ProcessBuilder应用程序接口(interface):

ProcessBuilder pb = new ProcessBuilder("executable.so");
Map<String, String> env = pb.environment();
env.put("LD_LIBRARY_PATH", "/proj/something");
Process javap = pb.start();
javap.waitFor();

这样,子进程将从 Java 进程继承所有环境变量,并且另外设置了 LD_LIBRARY_PATH 变量集。

关于java - 无法为 Java 进程设置 LD_LIBRARY_PATH,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8960499/

相关文章:

java - 是否有可能以某种方式继承修改字节码的最终类?

java - 在 Java 中调用 Jtag DLL 方法 (scan_multiple)

java - Graphql使用Input类型搜索数据

java - 使用 servlet 在浏览器中显示 PDF

java - 从 Java 调用 bash 脚本

windows - 用于 LocalizedResourceName 属性的使用

c++ - 使用 DLL 覆盖/修改 C++ 类

regex - Linux下c++ 11中正则表达式的奇怪行为

未找到安卓 adb

Java进程构建器: Resultant Process Hangs