1 Star 0 Fork 0

坐公交也用券/gcs

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
克隆/下载
sudo.go 2.64 KB
一键复制 编辑 原始数据 按行查看 历史
liumou 提交于 2022-12-14 22:57 . 基本完善sudo权限
package gcs
import (
"fmt"
"os/exec"
"strings"
"bitbucket.org/creachadair/shell"
"gitee.com/liumou_site/logger"
)
// 这是执行sudo命令的模块
// 通过Sudo权限执行命令并获取输出数据, 返回执行结果(成功/失败)及命令输出(字符串)
func (shells *ShellConfig) ShellGetOutSudo(cmd, arg string) (string, error) {
if shells.is_root {
logger.Debug("Currently running with root permission")
return ScriptSystem(cmd)
}
out, err := shells.Sudo(cmd)
return out, err
}
// 执行命令并获取执行结果, 返回执行结果(成功/失败)
func (shells *ShellConfig) ShellSudo(command, arg string) bool {
if shells.is_root {
logger.Debug("Currently running with root permission")
return shells.Shell(command)
}
_, err := shells.Sudo(command)
return err == nil
}
// 执行sudo命令
// command输入执行的命令,例如: apt
// arg: 输入命令参数,不要使用空格
func (shells *ShellConfig) Sudo(command string) (string, error) {
args, ok := shell.Split(command) // strings.Fields doesn't handle quotes
if !ok {
mess := fmt.Sprintf("unbalanced quotes or backslashes in [%s]", command)
return mess, fmt.Errorf("unbalanced quotes or backslashes in [%s]", command)
}
var arg string
var index int
var arg_ string
for index, arg_ = range args {
if index != 0 {
if index == 1 {
arg = arg_
} else {
arg = arg + " " + arg_
}
}
}
switch index {
case 1:
cmd := exec.Command("sudo", "-S", args[0], arg)
return shells.Execute(cmd)
case 2:
cmd := exec.Command("sudo", "-S", args[0], args[1], args[2])
return shells.Execute(cmd)
case 3:
cmd := exec.Command("sudo", "-S", args[0], args[1], args[2], args[3])
return shells.Execute(cmd)
case 4:
cmd := exec.Command("sudo", "-S", args[0], args[1], args[2], args[3], args[4])
return shells.Execute(cmd)
case 5:
cmd := exec.Command("sudo", "-S", args[0], args[1], args[2], args[3], args[4], args[5])
return shells.Execute(cmd)
case 6:
cmd := exec.Command("sudo", "-S", args[0], args[1], args[2], args[3], args[4], args[5], args[6])
return shells.Execute(cmd)
default:
cmd := exec.Command("sudo", "-S", args[0])
return shells.Execute(cmd)
}
}
// 执行命令
func (shells *ShellConfig) Execute(cmd *exec.Cmd) (string, error) {
pd := shells.password + "\n"
// 将密码作为命令的标准输入
cmd.Stdin = strings.NewReader(pd)
// 捕获命令的输出
output, err := cmd.CombinedOutput()
if err != nil {
logger.Error("执行命令时出错: %s", err)
}
// 输出命令的输出
fmt.Printf("%s\n", output)
return string(output), err
}
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
Go
1
https://gitee.com/liumou_site/gcs.git
git@gitee.com:liumou_site/gcs.git
liumou_site
gcs
gcs
v1.2.6

搜索帮助

23e8dbc6 1850385 7e0993f3 1850385