Java和系统环境变量

时间:2015-06-25 17:22:06

标签: java bash shell processbuilder

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

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

你会采取哪种方式?

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

TL; DR

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

1 个答案:

答案 0 :(得分:0)

我会选择以下其中一项:

  1. 尝试从路径执行。如果失败,则向用户报告错误,指示程序不在路径中(也显示路径)。通过这种方式,诱导用户配置他的路径,包括程序

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

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