繁体   English   中英

尝试使用 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

安迪

没有这样解决。

我解决了这个问题

  1. 使用实际运行脚本的选项之一(没有 su 权限),以及
  2. 在 sudoers 中向用户授予在没有密码提示的情况下运行脚本中的命令的权限。

希望这是有道理的。

不高兴,但它有效。

暂无
暂无

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

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