ユーザーが端末ベースで環境変数をすばやく設定できるようにする作業用アプリケーションを開発しています。各ターミナルにパスを設定することで、異なるディレクトリにある同じ名前のファイルがアプリケーションのテストに問題を引き起こさないようにします。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 以外の何かが必要ですか?
事前に助けてくれてありがとう!