从Windows中的Qt App在git bash中运行.sh脚本

时间:2018-07-25 12:16:18

标签: bash git qt sh qprocess

我在Windows上的Qt中有一个应用程序,我想在按下按钮并将输出保存到plainTextEdit时运行.sh脚本。

这是我的代码:

void MainWindow::on_pushButtonSTART_clicked()
{
  QProcess* process = new QProcess(this);
    connect(process, &QProcess::readyReadStandardOutput, [=] {
        ui->plainTextEditResults->setPlainText(process->readAllStandardOutput());
    });
    process->start("git-bash.exe", QStringList{QString("./"),"path/script1.sh"});

    //ui->plainTextEditResults->setPlainText(QString::number(process->exitCode()));
}

脚本:(我尝试使用#!/ bin / bash,结果相同)

#!/bin/sh

echo "Hello World!"

问题是我的脚本无法运行(我尝试这样做,没有效果:

#!/bin/sh

echo "Hello World!" >> test.json)

但是exitCode()为0。 一些帮助?如果可以的话,我想在git-bash或cmd中运行脚本。

2 个答案:

答案 0 :(得分:0)

git-bash.exe在您的路径上吗?

否则,您将必须指定可执行文件的完整路径。 C:\Program Files\Git\git-bash.exe

答案 1 :(得分:0)

我已经解决了问题,因此状态代码为0(正常输出),并且没有非常快速地打开和关闭窗口。
第一次运行cmd,然后在cmd中调用bash,然后在bash中调用脚本

QProcess* process = new QProcess(this);
connect(process, QOverload<int, QProcess::ExitStatus>::of(&QProcess::finished),
            [=](int exitCode, QProcess::ExitStatus exitStatus){
        ui->plainTextEditResults->appendPlainText(QString("exitStatus:") + QString::number(exitStatus));
        ui->plainTextEditResults->appendPlainText(QString("exitStatus normal:") + QString::number(QProcess::NormalExit));
        ui->plainTextEditResults->appendPlainText(QString("exitStatus crash:") + QString::number(QProcess::CrashExit));
        ui->plainTextEditResults->appendPlainText(QString("exitCode:") +QString::number(exitCode));
    });
processArgs+="/c \"\"C:\\Program Files\\Git\\bin\\bash.exe\" --login -i -- \"D:/path/script1.sh\"\"";
    process->setNativeArguments(processArgs);
    process->start("cmd.exe");