bash - 从 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 中运行脚本。
解决方案
我已经解决了它,使状态码为 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");
推荐阅读
- ios - 如何在 iOS 上检查用户设备上是否安装了特定应用程序?
- jquery - $event 在 IOS 中不支持,它在 Iphone 设备中不起作用 - Angular2
- swift - 滚动后调整单元格大小(自动布局)
- sqlite - 登录后,我的数据在我的 sql azure 数据库上不占优势
- reactjs - 从 react-s3 导入 S3FileUpload 导致 Unexpected Identifier 错误
- ios - Swift - 应用自定义字体时 UITextView 文本被剪切
- java - 从文本文件中的 URL 列表中获取网站的内容
- reactjs - 购物车组件未更新为正确数量
- angular - 如何创建自定义功能,如编辑,保存在 Kendo-angular-grid 上以获取选定的行数据
- javascript - 正则表达式不允许连续的点字符等