这是文件〜/ .bash_profile
中的一行 export MESSAGE="Hello World"
我想在java中访问系统变量MESSAGE
。
System.getenv("MESSAGE");
不起作用。
答案 0 :(得分:3)
.bash_profile文件仅用于登录shell。如果您的java进程是从不是登录shell的shell(例如顶部带有#!/bin/sh
的脚本)生成的,那么它将无法读取它(尽管它仍然可以从环境继承MESSAGE,具体取决于方式你跑吧。)
另请注意,.bash_profile也不会针对非“登录”shell的交互式shell运行,因此即使有shell提示,也不能依赖它运行。为此,人们通常使用.bashrc,它是为所有交互式shell提供的。
如果要在所有Bourne shell派生中设置变量而不管它们是否是交互式的,请将它放在.profile和.bashrc中。
答案 1 :(得分:1)
我建议您使用上面建议的echo $ MESSAGE测试您的环境变量是否确实“已定义”。
此外,更改bash_profile文件不会影响当前的shell,您必须使用“source”才能影响当前的shell。
我还建议阅读有关bashrc和bash_profile之间差异的this文章。
也许你应该在bashrc定义EXPORT?
答案 2 :(得分:0)
对于拥有.profile(对于旧的Bourne shell)的用户来说,这实际上会变得更有趣,它会被.bash_profile自动读入(提供兼容性)。在任何一种情况下,环境变量只在 login 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中使用export的注释是错误的,你应该不这样做,原因有两个:(1)性能损失相当微不足道,(2)你执行某些命令的几率非常高得到环境变量 - 特别是从你的窗口管理器菜单和其他任何父母没有出现实际命令提示的地方产生的东西。
最后,确保$ MESSAGE实际存在于您的环境中 - 查看“env”命令的输出 - 如果不存在,Java进程将不会看到它,除非它在内部创建并存储它在它自己的环境变量的内部副本。
另外请注意,如果在.profile中设置env变量,请使用以下语法:
VAR = VALUE;出口VAR
...因为旧的sh shell不支持“export VAR = VALUE”。如果我没记错的话,在一堆这些之前使用set -e并在之后设置+ e可以根本不需要使用“export”。
答案 3 :(得分:0)
另一个要查看的地方: / etc / environment (这可能会覆盖/替换通过IDE打开的shell中的.bashrc或.bash_profile)