Использование getenv и env не дает одинаковых результатов:
У меня есть программа на C, которая печатает каждую переменную среды, имя которой дается stdin. Он печатает переменные, такие как $PATH, $USER, но не видит переменные окружения, которые я определил в оболочке Linux... Например, в ~.bashrc я экспортировал MYTEST=test_is_working, а затем я получил исходный код bashrc (source ~/.bashrc). Я ожидал, что программа вернет test_is_working с getenv, но это не так.
#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
Я видел аналогичный пост: Использование функции getenv, где решение заключается в запуске программы из оболочки. Но я не могу, потому что я запускаю и отлаживаю в Qtcreator.
Я не знаю, где я ошибаюсь, кто-то может мне это объяснить?
Спасибо
1 ответ
- Переменная среды передается только дочерним процессам, которые запускались после установки переменной. Поэтому установка их в shell ничего не изменит в Qt Creator и программах, запущенных из него.
- Qt Creator позволяет настраивать переменные окружения (я это видел).
Проверьте настройки проекта (раздел выполнения) и / или свойства Qt Creator (это должно быть легко найти). - Вы также можете установить параметры программы в Qt Creator (даже перенаправлять стандартные потоки), это в настройках проекта, раздел Run.