【问题标题】:Is it possible to set environment variables needed for a separate process in Java? [duplicate]是否可以在 Java 中设置单独进程所需的环境变量? [复制]
【发布时间】:2017-11-02 12:49:58
【问题描述】:

我有一个想从 Java 开始的进程。问题是由于远程桌面客户端和我要启动的进程不匹配,我需要修改环境变量。我不会在生产中使用它,而仅用于运行测试。在我使用的工具中修复此错误之前,我也会这样做。

我没有 root 访问权限,我使用的是 Linux RHEL7。有人知道如何从 Java 设置此环境变量吗?我还应该补充一点,我是从 IDE 运行它的。

由于缺乏实际示例,以下答案不是很有帮助: Is it possible to set an environment variable at runtime from Java?

以下示例无法在我需要设置它们的范围内设置变量:Java - set environment variable

我试过了,

Process p = Runtime.getRuntime().exec("setenv " + name + " " + value);

但是得到以下错误信息,

java.io.IOException: Cannot run program "setenv": error=2, No such file or directory

编辑: 有人推荐了这篇文章,

How do I set environment variables from Java?

不幸的是,我在那里找不到任何解决方案。我要启动的进程已经有一个 Java API,它在我的环境中不起作用。我想要的是相当于linux命令的,

setenv NAME VALUE

对于java运行所在的进程。

【问题讨论】:

  • @randomir 不,这不起作用。或者如果我有时间重写大量代码,实际上流程构建器会起作用。
  • setenv 不是 Linux 命令,也不可能。它是 all 系统(不只是 Linux)上的 some shells,尤其是 csh 和 tcsh 中的 shell(内置)命令,但不是其他系统外壳(甚至在 Linux 上)。它也是一个系统调用,但系统调用不是程序或命令。您不识别您的 IDE,但在 Eclipse 中您可以在任何运行配置中设置 envvars,并且您可以为一个程序设置多个运行配置;如果其他 IDE 没有类似的东西,我会感到惊讶,因为这是很常见的事情。

标签: java linux


【解决方案1】:

使用ProcessBuilder:

ProcessBuilder pb = new ProcessBuilder("myCommand", "myArg1", "myArg2");
 Map<String, String> env = pb.environment();
 env.put("VAR1", "myValue");
 env.remove("OTHERVAR");
 env.put("VAR2", env.get("VAR1") + "suffix");
 Process p = pb.start();

【讨论】:

  • 好的,这基本上意味着我必须将这些参数添加到我希望开始的特定过程中?这在实践中会起作用,但会很麻烦。这样做的原因是我们已经有一个我想要启动的进程的 API。所以基本上我只想设置一个可用于任何流程的基线参数集。我知道这不是一种安全的做事方式,但对于私人 20 行(ish)测试用例,我认为这并不重要。
猜你喜欢
  • 1970-01-01
  • 2010-10-09
  • 2018-09-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-08-21
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多