java - 使用 Java ProcessBuilder,如何运行位于 UNIX 主目录中的进程?

标签 java unix processbuilder home-directory

我们有一个 Java 服务器客户端应用程序,它允许我们在不同的机器(即客户端)上运行进程,这些进程由 Java ProcessBuilder 启动。 。我想运行一个进程,该进程将被复制/同步到用户的主目录(即启动客户端的用户)。

如何在传递给 ProcessBuilderString 中引用 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/

相关文章:

java - 正确的编码方式

java - 证书的 base32 编码散列不匹配

java - 求图像 Java 的平均值

c - 2 个子进程之间的管道 UNIX C

c - 是否可以将 stdout 重定向到 C 中的两个位置?

java - 进程生成器导致 error2 即使命令从 cmd 运行也找不到指定的路径

java - 使用logica smpp发送DeliverSMResp

linux - 在类似 Linux/UNIX 的纯文本文件中隐藏网络代理密码

Java ProcessBuilder 和 bash

java - 用java运行bat文件