簡體   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