c++ - 从 C++ 应用程序将源命令传递给 bash 时出现问题

标签 c++ bash qt command-line environment-variables

我正在开发一个工作应用程序,允许用户在终端上快速设置环境变量。通过在每个终端中设置路径,我们确保不同目录中具有相同名称的文件不会导致应用程序测试出现问题。我正在使用 Qt 构建基于 C++ 的程序,所有数据类型在基础上都是相同的。

我正在使用以下代码在应用程序启动的终端中使用 system() 调用命令。 我可以使用代码在 bash 中运行命令;但是,当我尝试使用带参数的命令时遇到了问题。 这可能就是 source 似乎无法正常工作的原因,因为 source 命令后跟文件名。看起来我删除了 bash 命令后附加的参数。

我的代码:

void assignTerminalToPath(QString path)
{
    QString data = "";
    QString currentUsersHomeDirectory = QDir::homePath();
    QString tmpScriptLocation = currentUsersHomeDirectory;
    QByteArray ba;
    tmpScriptLocation += "/.tmpSourceFile";
    QFile tmpSourceFile(tmpScriptLocation);
    if(tmpSourceFile.open(QFile::WriteOnly | QFile::Truncate))
    {
        QTextStream output(&tmpSourceFile);
        data.append("export PATH=.:");
        data.append(path);
        data.append(":$PATH");
        output << QString("#!/bin/bash\n");
        output << data;
        tmpSourceFile.close();
    }
    data.clear();
    data.append("/bin/bash -c source ");
    data.append(tmpScriptLocation);
    ba = data.toLatin1();
    const char *cStr = ba.data();
    system(cStr);
}

也许我没有正确引用 bash,我需要 -c 之外的东西?

引用 Execute shell/bash command using C/C++

提前感谢您的帮助!

最佳答案

source 不是您可以调用的程序,它是嵌入的 bash 命令。它旨在由 bash 处理而无需调用 bash 的另一个拷贝,这样环境变量就可以在当前 bash 拷贝中更改。

但是,您不能将 source 作为 system() 的一部分调用。即使您确实成功了,一旦 system() 返回,其更改环境变量的效果对于调用方应用程序将完全消失。

关于c++ - 从 C++ 应用程序将源命令传递给 bash 时出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13392406/

相关文章:

c++ - 如何发送封装在类中的回调函数上的指针

bash - 无法使用 gsutil cp 上传到 Google Cloud Service,且没有任何可见错误,如何调试?

linux - 如何在循环中附加到 screen session ?

php - 如何使用 PHP 和远程 ssh 从文本文件中获取信息?

c++ - 在 QtCharts 上显示文本

qt - 查找 QFont 中的文本宽度

python - 从 C++ dll 到 Python 的指针 vector 上返回指针

C++制作指向const对象的指针数组

python - 带有可选参数的 Boost.Python 构造函数

c++ - OpenGL 绘制两台计算机之间的差异