在Golang中使用Sudosh

时间:2014-09-08 16:51:20

标签: go

我的程序目的是完成一些任务,然后在最后以用户的身份进行一些用途。

然而,当使用Go运行时,我得到了sudosh:无法获得控制终端。

这是因为sudosh正在寻找一个控制终端而无法找到它吗?这可能与Go有关吗?我正在将Python脚本转换为此Go程序,它在Python中运行良好。

import (
    "github.com/codeskyblue/go-sh"
    "fmt"
    "os"
)
c, _ := sh.Command("sudo", "sudosh", "bob").Output()
fmt.Println(c)
os.Exit(0)
  

sudosh:无法获得你的控制终端。

修复

import "os/exec"

func sudosh(name string) {
    c := exec.Command("/bin/sh", "-c", "sudo /path/to/sudosh " + name)
    c.Stdin = os.Stdin
    c.Stderr = os.Stderr
    c.Stdout = os.Stdout
    o := c.Run()
    o=o
}

1 个答案:

答案 0 :(得分:1)

sudo2sh source表示它正在尝试调用ttyname,这可能无法在go-sh.Command calling exec.Command(cmd, args...)的上下文中使用。

您可以直接调用ttyname进行测试,也可以尝试并实现此线程中的TTYname()函数。
您还可以查看isatty function of go-termutil以调试问题(如this answer中所述)。

底线是:如果ttyname会话中exec.Command失败,sudosh将始终返回该错误消息。