2012-09-06 51 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中打開彈)