尝试从具有 sudo 权限的 Qt 运行 shell 脚本
Trying to run a shell script from Qt with sudo rights
命令行(工作正常)
$ sudo chPermissions.sh
尝试在 Qt 程序中使用 QProcess 执行此操作,但已尝试以下但未成功
代码:
QString program = "/bin/sh /usr/bin/chPermissions.sh";
m_process->start(program);
m_process->waitForFinished();
qDebug() << m_process->exitCode();
结果:0(脚本 运行 但没有 sudo 权限并且无法运行!)
代码:
QString program = "sudo /bin/sh /usr/bin/chPermissions.sh";
m_process->start(program);
m_process->waitForFinished();
qDebug() << m_process->exitCode();
结果:1
代码:
QString program = "/usr/bin/sudo /bin/sh /usr/bin/chPermissions.sh";
m_process->start(program);
m_process->waitForFinished();
qDebug() << m_process->exitCode();
结果:1
代码:
QString program = "/bin/sh";
QStringList arguments;
arguments << "/usr/bin/chPermissions.sh";
m_process->start(program, arguments);
m_process->waitForFinished();
qDebug() << m_process->exitCode();
结果:0(脚本运行!没有sudo权限)
代码:
QString program = "/bin/sh";
QStringList arguments;
arguments << sudo << "/usr/bin/chPermissions.sh";
m_process->start(program, arguments);
m_process->waitForFinished();
qDebug() << m_process->exitCode();
结果:127(未找到命令)
代码:
QString program = "/bin/sh";
QStringList arguments;
arguments << /usr/bin/sudo << "/usr/bin/chPermissions.sh";
m_process->start(program, arguments);
m_process->waitForFinished();
qDebug() << m_process->exitCode();
结果:2(滥用 shell 内置函数)
代码:
QString program = "/bin/bash";
QStringList arguments;
arguments << "-c" << "\"/usr/bin/sudo /usr/bin/chPermissions.sh"\";
m_process->start(program, arguments);
m_process->waitForFinished();
qDebug() << m_process->exitCode();
结果:127
代码:
QString shellCommandLine = "/usr/bin/chPermissions.sh";
QStringList arguments;
arguments << "-c" << shellCommandLine;
m_process->start("/bin/sh", arguments);
m_process->waitForFinished();
qDebug() << "Exit Code: " << m_process->exitCode();
结果:0(脚本运行!)
代码:
QString shellCommandLine = "sudo /usr/bin/chPermissions.sh";
QStringList arguments;
arguments << "-c" << shellCommandLine;
m_process->start("/bin/sh", arguments);
m_process->waitForFinished();
qDebug() << "Exit Code: " << m_process->exitCode();
结果:1
代码:
QString shellCommandLine = "/usr/bin/sudo /usr/bin/chPermissions.sh";
QStringList arguments;
arguments << "-c" << shellCommandLine;
m_process->start("/bin/sh", arguments);
m_process->waitForFinished();
qDebug() << "Exit Code: " << m_process->exitCode();
结果:1
代码:
QString shellCommandLine = "/usr/bin/chPermissions.sh";
QStringList arguments;
arguments << "-c" << shellCommandLine;
m_process->start("/bin/sh", arguments);
m_process->waitForFinished();
qDebug() << "Exit Code: " << m_process->exitCode();
结果:0(脚本 运行 没有 sudo 权限)
谁能告诉我怎么做的秘诀? (或者如果不可能的话让我摆脱痛苦)
TIA
安迪
没有解决。
我通过
解决了这个问题
- 使用实际 运行 脚本的选项之一(没有 su 权限),并且
- 在 sudoers 中向用户授予 运行 没有密码提示的脚本中命令的权限。
希望这是有道理的。
不开心,但有效。
命令行(工作正常)
$ sudo chPermissions.sh
尝试在 Qt 程序中使用 QProcess 执行此操作,但已尝试以下但未成功
代码:
QString program = "/bin/sh /usr/bin/chPermissions.sh";
m_process->start(program);
m_process->waitForFinished();
qDebug() << m_process->exitCode();
结果:0(脚本 运行 但没有 sudo 权限并且无法运行!)
代码:
QString program = "sudo /bin/sh /usr/bin/chPermissions.sh";
m_process->start(program);
m_process->waitForFinished();
qDebug() << m_process->exitCode();
结果:1
代码:
QString program = "/usr/bin/sudo /bin/sh /usr/bin/chPermissions.sh";
m_process->start(program);
m_process->waitForFinished();
qDebug() << m_process->exitCode();
结果:1
代码:
QString program = "/bin/sh";
QStringList arguments;
arguments << "/usr/bin/chPermissions.sh";
m_process->start(program, arguments);
m_process->waitForFinished();
qDebug() << m_process->exitCode();
结果:0(脚本运行!没有sudo权限)
代码:
QString program = "/bin/sh";
QStringList arguments;
arguments << sudo << "/usr/bin/chPermissions.sh";
m_process->start(program, arguments);
m_process->waitForFinished();
qDebug() << m_process->exitCode();
结果:127(未找到命令)
代码:
QString program = "/bin/sh";
QStringList arguments;
arguments << /usr/bin/sudo << "/usr/bin/chPermissions.sh";
m_process->start(program, arguments);
m_process->waitForFinished();
qDebug() << m_process->exitCode();
结果:2(滥用 shell 内置函数)
代码:
QString program = "/bin/bash";
QStringList arguments;
arguments << "-c" << "\"/usr/bin/sudo /usr/bin/chPermissions.sh"\";
m_process->start(program, arguments);
m_process->waitForFinished();
qDebug() << m_process->exitCode();
结果:127
代码:
QString shellCommandLine = "/usr/bin/chPermissions.sh";
QStringList arguments;
arguments << "-c" << shellCommandLine;
m_process->start("/bin/sh", arguments);
m_process->waitForFinished();
qDebug() << "Exit Code: " << m_process->exitCode();
结果:0(脚本运行!)
代码:
QString shellCommandLine = "sudo /usr/bin/chPermissions.sh";
QStringList arguments;
arguments << "-c" << shellCommandLine;
m_process->start("/bin/sh", arguments);
m_process->waitForFinished();
qDebug() << "Exit Code: " << m_process->exitCode();
结果:1
代码:
QString shellCommandLine = "/usr/bin/sudo /usr/bin/chPermissions.sh";
QStringList arguments;
arguments << "-c" << shellCommandLine;
m_process->start("/bin/sh", arguments);
m_process->waitForFinished();
qDebug() << "Exit Code: " << m_process->exitCode();
结果:1
代码:
QString shellCommandLine = "/usr/bin/chPermissions.sh";
QStringList arguments;
arguments << "-c" << shellCommandLine;
m_process->start("/bin/sh", arguments);
m_process->waitForFinished();
qDebug() << "Exit Code: " << m_process->exitCode();
结果:0(脚本 运行 没有 sudo 权限)
谁能告诉我怎么做的秘诀? (或者如果不可能的话让我摆脱痛苦)
TIA
安迪
没有解决。
我通过
解决了这个问题- 使用实际 运行 脚本的选项之一(没有 su 权限),并且
- 在 sudoers 中向用户授予 运行 没有密码提示的脚本中命令的权限。
希望这是有道理的。
不开心,但有效。