简体   繁体   English

尝试使用 sudo 权限从 Qt 运行 shell 脚本

[英]Trying to run a shell script from Qt with sudo rights

command line (works fine)命令行(工作正常)

$ sudo chPermissions.sh

trying to do this from within a Qt program, using QProcess and have tried the following without success尝试从 Qt 程序中执行此操作,使用 QProcess 并尝试了以下操作但没有成功

code:代码:

QString program = "/bin/sh /usr/bin/chPermissions.sh";
m_process->start(program);
m_process->waitForFinished();
qDebug() << m_process->exitCode();

result: 0 (the script ran but without sudo rights & didn't work!)结果:0(脚本运行但没有 sudo 权限并且不起作用!)

code:代码:

QString program = "sudo /bin/sh /usr/bin/chPermissions.sh";
m_process->start(program);
m_process->waitForFinished();
qDebug() << m_process->exitCode();

result: 1结果:1

code:代码:

QString program = "/usr/bin/sudo /bin/sh /usr/bin/chPermissions.sh";
m_process->start(program);
m_process->waitForFinished();
qDebug() << m_process->exitCode();

result: 1结果:1

code:代码:

QString program = "/bin/sh";
QStringList arguments;
arguments <<  "/usr/bin/chPermissions.sh";
m_process->start(program, arguments);
m_process->waitForFinished();
qDebug() << m_process->exitCode();

result: 0 (the script ran! no sudo rights)结果:0(脚本运行!没有 sudo 权限)

code:代码:

QString program = "/bin/sh";
QStringList arguments;
arguments << sudo <<  "/usr/bin/chPermissions.sh";
m_process->start(program, arguments);
m_process->waitForFinished();
qDebug() << m_process->exitCode();

result: 127 (command not found)结果:127(未找到命令)

code:代码:

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();

result: 2 (Misuse of shell builtins)结果:2(误用 shell 内置函数)

code:代码:

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();

result: 127结果:127

code:代码:

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();

result: 0 (the script ran!)结果:0(脚本运行!)

code:代码:

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();

result: 1结果:1

code:代码:

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();

result: 1结果:1

code:代码:

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();

result: 0 (script ran without sudo rights)结果:0(脚本在没有 sudo 权限的情况下运行)

Anyone able to let me know the secret of how to do this?任何人都可以让我知道如何做到这一点的秘密? (or put me out of my misery if it's not possible) (或者如果不可能的话,让我摆脱痛苦)

TIA TIA

Andy安迪

Not solved as such.没有这样解决。

I got round this by我解决了这个问题

  1. using one of the options that actually runs the script (without su rights), and使用实际运行脚本的选项之一(没有 su 权限),以及
  2. granting permission in sudoers, to user, to run the command in the script without password prompt.在 sudoers 中向用户授予在没有密码提示的情况下运行脚本中的命令的权限。

hope that makes sense.希望这是有道理的。

not happy, but it works.不高兴,但它有效。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM