代码拉取完成,页面将自动刷新
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
}
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。