我的程序目的是完成一些任务,然后在最后以用户的身份进行一些用途。
然而,当使用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
}
答案 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
将始终返回该错误消息。