繁体   English   中英

从c ++应用程序传递源命令到bash的问题

[英]Problems passing source command to bash from c++ application

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

我使用以下代码来调用应用程序从使用system()启动的终端中的命令。 我可以使用代码将命令运行到bash中; 但是,当我尝试使用带参数的命令时遇到问题。 这可能是源代码似乎无法正常工作的原因,因为源命令后跟文件名。 看来我删除了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以外的东西?

参考使用C / C ++执行shell / bash命令

在此先感谢您的帮助!

source不是你可以调用的程序,它是嵌入式bash命令。 它被设计为由bash处理而不调用另一个bash副本,这样可以在当前bash副本中更改环境变量。

但是,您不能将source作为system()一部分。 即使你确实取得了成功,一旦system()返回,它对改变环境变量的影响将完全丧失给调用者应用程序。

尝试使用双引号(“command - arg1 - to arg2”)中的参数进行包络以在函数系统()中传输。

用过的:

char * com =“\\”命令-arg1 -arg2 \\“”;

系统(COM);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM