将参数从 Qt 传递到 shell 脚本文件

pass arguments from Qt to a shell script file

本文关键字:shell 脚本 文件 参数 Qt      更新时间:2023-10-16

我想将一个字符串值从Qt代码传递到我的shell脚本文件,名为'part1_4_md'。这是我从Qt的代码:

void MainWindow::on_pushButton_clicked()
{
QString path = ui->lineEdit->text();
QProcess *process = new QProcess;
process->start("/bin/bash", QStringList() << "/home/kha/Unix/QT/part1_4_md");
process->waitForBytesWritten();
process->waitForFinished();
QString output(process->readAllStandardOutput());
ui->textEdit->setPlainText(output); 
QTextCursor textCursor = ui->textEdit->textCursor();
textCursor.movePosition(QTextCursor::Start, QTextCursor::MoveAnchor, 1);
}

我创建了一个 lineEdit 框,当用户在该框中键入字符串值并按下按钮时,我需要将该值传递给我的 shell 脚本文件,并且 shell 脚本文件使用该值运行。这是我的 shell 脚本文件的样子:

#!/bin/bash
files=($*);
dates=();
for (( i = 0; i<${#files[@]}; i++ ))
do
dates[$i]=$(date -r ${files[i]} +"%Y%m%d");
done

字符串值应传递给"$*"以用作"files"数组的参数。请告诉我如何做到这一点。

您已经通过 QProcess::start 的参数将脚本作为参数传递给字符串列表中的/bin/basharguments。您可以将更多参数附加到列表中,bash 应该能够path解释为脚本的第一个参数。

QString path = ui->lineEdit->text();
QString script("/home/kha/Unix/QT/part1_4_md");
QProcess *process = new QProcess;
process->start("/bin/bash", QStringList() << script << path);

如果这不起作用,您可以使用-cbash 选项。

QString path = ui->lineEdit->text();
QString script("/home/kha/Unix/QT/part1_4_md");
QString command_string = script + " " + path;
QString c_option("-c");
QProcess *process = new QProcess;
process->start("/bin/bash", QStringList() << c_option << command_string);

请注意,通过在 GUI 线程中等待进程来阻止 UI。您可以连接到 done 和readyReadStandardOutput 以及错误信号,并异步运行进程或在单独的线程中运行它。