2012-09-06 27 views

回答

1

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

3

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

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

如果您希望在所有Bourne shell派生中设置变量,无论它们是否为交互式,都将其放入.profile和.bashrc中。

0

对于拥有.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进程将不会看到它,除非它在内部创建它并存储它在它自己的环境变量的内部副本中。

另外需要注意的是,如果你在env中设置了env变量。使用此语法:

VAR = VALUE; export VAR

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

0

另一个地方看看:的/ etc /环境(这可能否决/替换您的.bashrc或者.bash_profile文件中通过你的IDE中打开弹)