我想獲得一個操作系統(Windows XP)環境變量,我的代碼如下(JDK 1.6):爲什麼eclipse或cmd控制檯緩存OS env變量?
public class TestEnv{
public static void main(String...args){
System.out.println(System.getenv("catalina_home"));
}
}
在第一頁,有沒有在我的電腦被稱爲catalina_home
變量,它輸出null
,然後我在My Computer > Advanced > Environment Variables
增加一個catalina_home
變量,它仍然輸出null
,如果我關機並重新啓動eclipse,它會輸出正確的值。如果我在cmd控制檯中運行此代碼,請關閉並重新啓動新的cmd控制檯以獲取正確的值,並且如果刪除現有變量,首先會輸出非空值,直到重新啓動eclipse或cmd控制檯,它可以輸出null
。所以我認爲eclipse或cmd控制檯已經緩存了OS env變量,但沒有證據,即使他們真的這樣做,我想知道爲什麼? 任何想法將不勝感激。 Thx非常。
非常感謝。 – hiway 2013-05-07 14:43:42
線程安全性是一個有效的點。安全性是IMO對操作系統的設計決定。畢竟,對環境的修改可以像讀取目錄權限或修改內存頁面一樣受到保護。 – Devolus 2013-05-08 04:36:32
請注意,在Amiga上,env變量是特殊設備上的文件存儲'ENV:'(想想Linux上的'/ sys/env/varname')。文件系統規則管理訪問/刷新規則,但它允許任何人隨時更改已運行的進程的環境變量。這使得移植軟件有點奇怪。 – 2013-05-08 09:14:55