无法为Java进程设置LD_LIBRARY_PATH

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

Parent.sh(包含2行)

   - source set_env.sh 

- executable.so

Set_env.sh

   - setenv LD_LIBRARY_PATH /proj/something

从Linux控制台手动执行Parent.sh

scipt时,将在正确设置LD_LIBRARY_PATH的情况下调用execute.so。但是将其与Java代码集成为:

String[] commandArray ={"Parent.sh"};

Runtime runtime = Runtime.getRuntime();

Process javap = runtime.exec(commandArray);

javap.waitFor();

未为可执行文件设置LD_LIBRARY_PATH

我希望描述清楚:)

请让我们知道代码中有什么问题。

回答:

沙丘答案解决了您的问题,但在这种情况下,我强烈建议您使用其他方法。不应依赖外壳程序来设置环境参数,而应在Java代码中执行此操作。这样,您无需知道系统上存在哪些外壳以及它们的语言是什么,它就可以在所有平台上工作。

为此,您可以使用Runtime.exec(String[] cmd, String[]

environment)重载(javadoc)。作为第二个参数,您可以传递一个包含子进程将看到的所有环境变量的数组。

ProcessBuilderAPI

甚至更好一点:

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进程设置LD_LIBRARY_PATH 的全部内容, 来源链接: utcz.com/qa/413964.html

回到顶部