【发布时间】:2012-11-15 06:12:08
【问题描述】:
我正在开发一个工作应用程序,它允许用户在终端上快速设置环境变量。通过在每个终端中设置路径,我们确保不同目录中具有相同名称的文件不会导致应用程序测试出现问题。我正在使用 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是一个外部命令,您运行的内容也绝对是零影响。将导致的环境变化仅适用于子shell,从您的进程或系统上的任何其他内容中都看不到。你想做什么? -
在使用 Qt 时,您应该使用 QProcess,它具有用于更改环境变量等的 API。
标签: c++ bash qt command-line environment-variables