【问题标题】:Java and system environment variablesJava 和系统环境变量
【发布时间】:2015-09-12 10:34:53
【问题描述】:

我正在开发一些需要从 bash 运行一些外部程序的 Java 应用程序。 我首选的方法是使用ProcessBuilder,但我有一些问题。 ProcessBuilder.environment() 返回一个 PATH=/usr/bin:/bin:/usr/sbin:/sbin,我猜这是真正的系统路径。

但是有一个技巧,在我的 OSX 机器上,这些程序安装在 /usr/local/bin 下,而在其他机器上可以完全不同的位置。 我可以用我的路径硬编码environment.put(),但这并不能解决我的跨平台问题。 最好的选择是如果我可以copy-paste bash PATH 如果这是可能的以及如何?

你会采取哪种方法?

  • 硬编码最可能的路径并放入 ProcessBuilder
  • 读取带有路径信息(.profile、bash_profile、/etc/paths 等)的文件
  • 从 shell 复制粘贴 PATH - 如何? (如果可能,Win、Osx、Linux 解决方案)
  • 其他?

TL;DR

我想从可以在任何位置的 ProcessBuilder 执行命令,我可以假设命令的路径在 shell PATH env 中。 怎么样?

【问题讨论】:

  • 我会选择以下之一:
  • 它应该从您启动应用程序的外壳自动继承。也许您只是忽略了导出 PATH?
  • 不是。我得到“继承”的是我提到的 PATH=/usr/bin:/bin:/usr/sbin:/sbin 如果重要的话我忘了提到这是桌面应用程序。

标签: java bash shell processbuilder


【解决方案1】:

我会选择以下之一:

  1. 尝试从路径执行。如果失败,向用户报告错误,表明程序不在路径中(同时显示路径)。这样,用户就会被引导配置他的路径,包括程序

  2. 搜索特定于您的程序的环境变量(例如,program-name_BINPATH)。如果没有找到,告诉用户他必须定义它。该变量应指向包含二进制文件的目录

  3. 尝试执行二进制文件。如果失败加载配置文件(如果存在),它指定它们的位置。如果无法加载配置文件,请在文件系统中搜索二进制文件(向用户报告您在做什么,并且只会执行一次),一旦找到,将它们的位置存储在配置文件中。

【讨论】:

  • 1.我正在考虑这个解决方案 - 但我更愿意让用户独自处理路径配置。
猜你喜欢
  • 2012-03-29
  • 2011-10-26
  • 1970-01-01
  • 2015-09-16
  • 2019-01-19
  • 2015-08-20
  • 2017-07-16
  • 1970-01-01
相关资源
最近更新 更多