我有我的/etc/environment
如下
APP="/opt/apps/"
PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games"
JAVA_HOME="/usr/lib/jvm/java-8-oracle"
我在我的机器上采购了source /etc/environment
。当我在终端上键入echo $APP
时,我能够获得输出
但是当我从java文件中调用它时
LOGGER.error("APP: " + System.getenv("APP"));
LOGGER.error("PATH: " + System.getenv("PATH"));
LOGGER.error("JAVA_HOME: " + System.getenv("JAVA_HOME"));
我只得到PATH的输出而不是其他2个env变量。
OUTPUT
2017-12-18 07:22:10 ERROR JRWebService:127 - APP: null
2017-12-18 07:22:10 ERROR JRWebService:128 - PATH:/ usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
2017-12-18 07:22:10 ERROR JRWebService:129 - JAVA_HOME: null
请纠正我,我做错了什么
听起来好像APP和JAVA_HOME没有导出。对于unix shell,set(变量在当前shell中可见)和export(变量对所有子进程可见)之间存在差异。如果只键入“X = Y”,则X已设置,但未导出。 PATH主要出口到某个地方。
您可以通过在控制台中运行“export | grep APP
”来测试它。如果APP没有显示,则变量将不会对java或您运行的任何其他程序可见,即使echo $APP
工作得很好。
如果是这种情况,只需将“export APP”添加到.profile或用于启动java应用程序的脚本(或者在开始java之前测试,只需在控制台上键入它)。
您不应该来源/ etc / environment。这不是将变量引入流程的方法。 / etc / environment文件不是脚本,因此获取它是没有意义的。它只是一个设置列表,有点像属性文件。
有关详细信息,请参阅this。
登录时会读取它。因此,要使变量可见,您应该注销并重新登录。