Привет Я пытаюсь выполнить файл 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: ""
У меня заканчивается идея, кто-нибудь знает, почему она не работает, пожалуйста?
Я не могу сказать, что я полностью понимаю ваш вопрос, но мне кажется, что вы пытаетесь обновить среду своего процесса с помощью сценария bash
. Это просто невозможно. Детский процесс никогда не сможет изменить среду своего родительского процесса.
И ваш процесс приложения не bash
(это ваше приложение), поэтому он не может "генерировать" сценарий оболочки. Если у вас есть сценарий bash
настройки среды, у вас есть следующие возможности:
Запустите скрипт env-setup перед запуском приложения (возможно, запуск приложения через сценарий bash
).
Выполните bash
как дочерний процесс, попросите его запустить сценарий и извлечь из него соответствующую информацию (например, запись среды в стандартный вывод в сценарии bash
и запись ее стандартного вывода в C++). Для этого вы можете посмотреть на QProcess
, особенно на QProcess::setReadChannel()
.
bash
?