2010-07-14 115 views
3
getenv的功能

我有這個下面的程序:在Linux中使用

 
int main() 
{ 
    char* v = getenv("TEST_VAR"); 
    cout << "v = " << (v==NULL ? "NULL" : v) << endl; 
    return 0; 
} 

這些行添加到.bashrc文件:

 
TEST_VAR="2" 
export TEST_VAR 

現在,當我從終端窗口中運行該程序( Ubuntu 10.04),它會打印v = 2.如果我通過另一種方式運行程序:使用啓動器或從Eclipse中打印NULL。我認爲這是因爲TEST_VAR僅在bash shell中定義。我如何創建持久的Linux環境變量,在任何情況下都可以訪問?

回答

3

在我的系統(Fedora 13的),你可以通過在/添加它們使全系統的環境變量等/的profile.d /。

因此,舉例來說,如果你在/etc/profile.d/my_system_wide.sh內容添加到文件

SYSTEM_WIDE="system wide" 
export SYSTEM_WIDE 

然後打開另一個終端應該採購它無論是誰,用戶在打開的終端

echo $SYSTEM_WIDE 
system_wide 
+0

謝謝,這個伎倆。 – 2010-07-14 06:23:09

2

將其添加到.bash_profile(位於您的主目錄中)。您需要註銷並重新登錄才能生效。

而且,因爲你正在使用bash,你可以結合出口和設置在一條語句:

export TEST_VAR="2" 
+0

.bash_profile在我的電腦上不存在。我創建了新文件並將TEST_VAR移到了它上面。重新啓動後,即使在shell中TEST_VAR也不可用。 – 2010-07-14 06:08:50

1

Linux上沒有這樣的系統環境變量。每個過程都有自己的環境。現在,默認情況下,每個進程都從其父進程繼承它的環境,因此您可以通過確保在每個感興趣的進程的祖先中設置一個var來獲得類似於系統範圍的環境。然後,只要沒有其他進程改變那個var,每個感興趣的進程都會設置它。

這裏的其他答案給出了各種早期設置變量的方法。例如,.bash_profile會在用戶運行的每個登錄過程中設置它,這是登錄後運行的每個進程的最終父級。 /etc/profile被每個用戶的每個bash登錄讀取。

2

對不起,如果我是天真的,但不是.bash_profile只有當你運行bash作爲你的默認shell有用嗎?

我'有時'使用Linux,大多使用ksh。我有.profile所以可能你應該檢查。*配置文件並在那裏輸出變量。

祝你好運:)