我们有一个 Java 服务器客户端应用程序,它允许我们在不同的机器(即客户端)上运行进程,这些进程由 Java ProcessBuilder
启动。 。我想运行一个进程,该进程将被复制/同步到用户的主目录(即启动客户端的用户)。
如何在传递给 ProcessBuilder
的 String
中引用 unix 主目录? (由于服务器-客户端应用程序的设计,只有进程的字符串、参数等被传递给 ProcessBuilder。)
如果我明确指定主目录,它就会起作用:
/home/user/processes/process.sh
但是,假设我知道哪个用户正在运行客户端。 (设计的一部分是我们可以切换/替换盒子/客户端来运行作业,而不必知道谁在给定盒子上启动了客户端。)
我也尝试过,但没有成功:
$HOME/processes/process.sh
~/processes/process.sh
最佳答案
问题是 ~ 和 $HOME 只能被您的 shell(可能是 BASH)理解,而不能被 ProcessBuilder 或 Java 理解。
$HOME 应可通过属性user.home
获得。请参阅System Properties documentation
String home = System.getProperty("user.home");
即
File fullpath = new File(System.getProperty("user.home"), "processes/process.sh");
ProcessBuilder processBuilder = new ProcessBuilder(fullpath.getAbsolutePath());
或者可以相对于当前目录调用它
ProcessBuilder processBuilder = new ProcessBuilder("processes/process.sh");
processBuilder.directory(new File(System.getProperty("user.home")));
关于java - 使用 Java ProcessBuilder,如何运行位于 UNIX 主目录中的进程?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42087517/