在 macOS 上从 Java 在系统路径中查找命令

问题描述 投票:0回答:1

在 Java 中,我需要在 macOS 上执行用户安装的命令(我们称之为

abc
)。然而跑步时

Runtime.getRuntime().exec(new String[] {"abc", "--argument"});

找不到它,因为 Java 似乎继承了有限的系统 $PATH(它在从系统 shell 调用它时起作用)。我想通了

Runtime.getRuntime().exec(new String[] {"sh", "-c", "$SHELL -c 'abc --argument'"});

适用于我的设备(使用 zsh 和 Fish 作为 shell 进行测试)。但是,在将 bash 设置为系统 shell 的其他设备上,无法找到它。我希望调用

$SHELL
能够加载登录路径。

这两个都不起作用:

Runtime.getRuntime().exec(cmd);
processBuilder.start();

从 Java 运行系统 $PATH 中的命令的正确方法是什么?

java shell command-line path
1个回答
0
投票

如果您正在寻找

$PATH
的每用户定制,那么您也许可以这样做:

/* Contents of named file in /tmp are:
export PATH=/opt/lib:$PATH
*/

public class PathExtender {
    public static void main(String[] args) throws Exception {
        final String[] cmdAddToPath = {
            "/bin/bash",
            "-c",
            "source /tmp/add-to-path && echo $PATH"
        };
        new ProcessBuilder(cmdAddToPath).inheritIO().start();
    }
}

/opt/lib
的路径现在为我添加到
$PATH
前面

© www.soinside.com 2019 - 2024. All rights reserved.