2014-03-06 100 views
1

我有一個C程序打印每個環境變量,其名稱由stdin給出。它打印變量如$ PATH,$ USER,但它沒有看到我在Linux shell中定義的環境變量......例如,在〜.bashrc中我導出了MYTEST = test_is_working,然後我找到了bashrc(source 〜/ .bashrc中)。 我希望程序能夠用getenv返回test_is_working,但它不會。使用getenv和env不會給出相同的結果:

#include <QCoreApplication> 
#include <stdio.h> 
#include <stdlib.h> 

int main(int argc, char *argv[]) 
{ 
    QApplication a(argc, argv); 

    char* my_env= getenv("MYTEST"); 

    if(my_env!=NULL){ 
     printf("my env is : %s \n", my_env); 
    } 
    else { 
     printf("can't find env \n"); 
    } 
return a.exec(); 
} 

它返回:找不到ENV

而當我打開一個終端,輸入「ENV」,我有MYTEST = test_is_working

我看到一個類似的帖子:Using getenv function 凡解決方案是從shell啓動程序。但我不能因爲我在Qtcreator中運行和調試。

我不知道我在哪裏錯了,有人可以向我解釋嗎?

感謝

+0

如果從shell運行QtCreator會怎麼樣? – vahancho

+1

請注意,您可以在Qt創建者中設置環境變量,在Run settings對話框中的某處。 – nos

+0

所以是的,它工作,如果我從終端啓動qtcreator不知道爲什麼我沒有想到這一點,謝謝 – user2177446

回答

1
  1. 環境變量傳遞只設置變量之後,在那裏開始的子進程。因此,在shell中設置它們不會改變Qt Creator中的任何內容,並且程序從它開始。
  2. Qt Creator允許自定義環境變量(我見過它)。
    檢查項目設置(運行部分)和/或Qt Creator屬性(應該很容易找到)。
  3. 你也可以在qt創建者(甚至重定向標準流)中設置程序參數,它在項目設置中運行部分。
+0

如果我從殼啓動Qtcreator不是讓它成爲shell的子進程?我應該找不到我已經放入的變量嗎? 是的,我可以在我的項目中自定義環境變量,但它不保存我的變量,如果我給予或複製我的項目在其他地方。 – user2177446

+0

如果每次執行程序時將變量直接添加到我的項目的代碼中,我將失去在我的系統上的不同進程之間共享的環境變量的實用程序。 – user2177446

+0

例如我有一個日誌系統爲我的所有程序與它的路徑有我想要檢索它的環境變量。 也許我不能,但我想知道是否有可能。否則,我會把路徑放在我的代碼中。 – user2177446

相關問題