首页 > 解决方案 > 从 Windows 中的 Qt App 在 git bash 中运行 .sh 脚本

问题描述

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

这是我的代码:

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 中运行脚本。

标签: bashgitqtshqprocess

解决方案


我已经解决了它,使状态码为 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");

推荐阅读