以下是文件~/.bash_profile中的一行:
export MESSAGE="Hello World"
我想在Java中访问系统变量MESSAGE
。
System.getenv("MESSAGE");
不能工作。
另一个需要查看的地方是:/etc/environment(这可能会在通过IDE打开的shell中覆盖/替换您的.bashrc或.bash_profile)
对于那些有 .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”(除非你应该使用-r而不是-f)。有关在.bashrc中使用导出的评论是错误的,你不应该这样做,有两个原因:(1)一个相当微不足道的性能惩罚,(2)一个相当高的机会,你执行的某些命令不会获得环境变量-特别是从窗口管理器菜单和其他地方生成的东西,在它们的父级中没有出现任何实际的命令提示符。最后,请确保$ MESSAGE实际存在于您的环境中-查看“env”命令的输出-如果它不存在,则Java进程将无法看到它,除非它在内部创建并存储在其自己的内部副本中的环境变量中。
另一个注意事项,如果您在.profile中设置env变量,请使用以下语法:
VAR=VALUE; export VAR
由于旧的sh shell不支持“export VAR = VALUE”,因此在一堆这些命令之前使用set -e,然后在set +e之后可以完全消除使用“export”的需要,如果我记得正确的话。
echo $MESSAGE
来确保环境变量已定义。 - pb2q