выполнить bash в программе на C для экспорта переменной среды

0

Привет Я пытаюсь выполнить файл bash, который экспортирует внутри, и это в мою программу Cpp.

Цель состоит в том, чтобы автоматически установить необходимую переменную среды в начале одной из моих программ.

Кажется, я не могу заставить его работать.

кусок моего myExport.sh:

export LOG4CXXCONFFILE="/home/me/workspace/Log/log4cxx.properties"

мой код:

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

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

    qDebug() << system(" bash myExport.sh");
    try
    {
        QString myFile = getenv("LOG4CXXCONFFILE");
        qDebug() << "my env variable directory path:"<< myFile;
    }
    catch(Exception&)
    {
        result = "EXIT_FAILURE";
    }
return a.exec();
}

мой отладчик показал мне, что это сработало, но я не могу получить env. переменная:

0
мой путь каталога переменной env: ""

Я думал, что это может быть потому, что скрипты только устанавливают среду внутри подселей, в которой она работает, поэтому я попытался:

qDebug() << system("../myExport.sh");

который дал мне тот же ответ.

поэтому я также попытался:

qDebug() << system("source myExport.sh");

и ответ был:

sh: 1: source: not found
32512 
my env variable directory path: ""

я попытался:

qDebug() << system("bash source myExport.sh");
bash: source: Aucun fichier ou dossier de ce type   (no file or directory of this type, don't know why this is the only error in french)
32512 
my env variable directory path: ""

У меня заканчивается идея, кто-нибудь знает, почему она не работает, пожалуйста?

  • 1
    Запахи проблемы XY . Можете ли вы указать, что вы на самом деле пытаетесь сделать (немного о переменных окружения не слишком ясно), вместо того чтобы углубляться в детали запуска bash ?
  • 0
    Это беспорядок. Вы могли бы по крайней мере использовать заглавные буквы и правильную пунктуацию!
Показать ещё 1 комментарий
Теги:
export
environment-variables
system

1 ответ

1
Лучший ответ

Я не могу сказать, что я полностью понимаю ваш вопрос, но мне кажется, что вы пытаетесь обновить среду своего процесса с помощью сценария bash. Это просто невозможно. Детский процесс никогда не сможет изменить среду своего родительского процесса.

И ваш процесс приложения не bash (это ваше приложение), поэтому он не может "генерировать" сценарий оболочки. Если у вас есть сценарий bash настройки среды, у вас есть следующие возможности:

  1. Запустите скрипт env-setup перед запуском приложения (возможно, запуск приложения через сценарий bash).

  2. Выполните bash как дочерний процесс, попросите его запустить сценарий и извлечь из него соответствующую информацию (например, запись среды в стандартный вывод в сценарии bash и запись ее стандартного вывода в C++). Для этого вы можете посмотреть на QProcess, особенно на QProcess::setReadChannel().

Ещё вопросы

Сообщество Overcoder
Наверх
Меню