【问题标题】:exec.Command fails to Run in debug modeexec.Command 无法在调试模式下运行
【发布时间】:2018-06-21 09:53:23
【问题描述】:

我正在尝试使用 exec 命令在 /var 和 /etc 中创建目录,因为我需要 root 权限,所以我这样做了:

path := "/var/log/xxx/yyy"
cmd := exec.Command("sudo", "mkdir", "-p", path)
err = cmd.Run()

我在我的 golang 项目中使用 Visual Studio 代码,有趣的是,我发现从终端执行这段代码时效果非常好。但是在调试模式下从 Visual Studio 代码运行时根本不起作用。

有人知道这是为什么吗?

【问题讨论】:

  • 检查 stderr,可以通过将 os.Stderr 或缓冲区等分配给 cmd.Stderr,或者通过调用 CombinedOutput 而不是 Run。
  • 什么是“调试模式”?

标签: debugging go visual-studio-code exec root


【解决方案1】:

我怀疑sudo 无法从终端读取密码,因为被调试的进程没有连接到真实终端。多种选择:

  • /etc/sudoers中禁用密码提示:
%wheel ALL=(ALL) NOPASSWD: ALL
  • 使用sudo -A 一个标志结束设置SUDO_ASKPASS 环境到图形密码提示。例如:
cmd := exec.Command("sudo", "-A", "mkdir", "-p", path)
cmd.Env = append(os.Environ(),
    "SUDO_ASKPASS=/usr/bin/qt4-ssh-askpass")
err := cmd.Run()

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-01-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-09
    相关资源
    最近更新 更多