System.getenv没有得到〜/ .bash_profile中定义的variables

这是〜/ .bash_profile文件中的一行

export MESSAGE="Hello World"

我想访问java中的系统variablesMESSAGE

System.getenv("MESSAGE"); 不起作用。

.bash_profile文件仅用于登录shell。 如果您的java进程是从不是登录shell的shell(例如顶部带有#!/bin/sh的脚本)产生的,那么它将不会读取它(尽管它仍然可以从环境中继承MESSAGE,具体取决于你如何运行它)。

还要注意的是.bash_profile也不能运行在非“登录”shell的交互式shell中,所以即使有shell提示,也不能依靠它运行。 人们通常使用为所有交互式shell提供的.bashrc。

如果您想要在所有Bourne shell衍生产品中设置变量,无论它们是否为交互式,请将其放在.profile和.bashrc中。

我建议你测试一下,如果你的环境变量确实是用上面建议的echo $ MESSAGE来“定义”的。
另外,改变bash_profile文件不会影响你当前的shell,
您必须使用“source”才能生效您的当前shell。
我也建议阅读这篇关于bashrc和bash_profile之间差异的文章。
也许你应该在bashrc中定义EXPORT?

对于拥有一个.profile(旧的Bourne shell)的用户来说,这实际上会变得更有趣,它会自动被.bash_profile读入(提供兼容性)。 在任何一种情况下,环境变量都只在登录 shell启动时被读入一次,所有的子shell都会自由地继承这些变量。 .bashrc是用于tty依赖的东西和不可用的东西,比如函数(旧的sh使用$ ENV,我想,如果它被设置了,类似的东西)。

你对〜/ .bash_profile的使用看起来很好(尽管单引号比双引号更可靠,允许一些替换)。 确保你已经注销并返回到编辑该文件和尝试你的测试之间,或者使用“。〜/ .bash_profile”(不包括引号和注意前导点和空格,因为这里的点是命令)。

http://www.joshstaiger.org/archives/2005/07/bash_profile_vs.html中的文章涵盖了一些很好的东西,比如在你的〜/ .bash_profile的末尾使用“〜〜/ .bashrc”(excepth你应该使用-r,而不是-f)。 关于在你的.bashrc中使用导出的注释是错误的,你不应该这样做,原因有两个:(1)相当不重要的性能损失;(2)执行某些命令的可能性很高,不会得到环境变量 -特别是窗口管理器菜单和其他地方的实际命令提示符没有出现在父母的任何地方。

最后,确保$ MESSAGE确实存在于你的环境中 – 查看“env”命令的输出 – 如果它不存在,Java进程将不会看到它,除非它在内部创建它并将其存储在它自己的内部副本的环境变量。

另外请注意,如果您在.profile中设置env变量,请使用以下语法:

VAR = VALUE; 导出VAR

…因为旧的SH壳不支持“导出VAR = VALUE”。 如果我没有记错的话,在使用set -e之前,设置+ e之后可以根本不需要使用“export”。

另一个地方可以看看: / etc / environment (这可能会推翻/替换通过IDE打开的shell中的.bashrc或.bash_profile文件)