如何执行命令行

时间:2019-03-18 13:50:54

标签: go

我正在尝试执行两个命令:

  • sudo ip link set can0 type can bitrate 500000
  • sudo ip link set can type can restart-ms 1000

这是我的代码:

package main

import (
    "log"
    "os"
    "os/exec"
)

func main(/*in string*/)/*(out bool)*/ {

        in :="setup"

    switch in {

    case "setup":
        bringUp()
        setRestart()
        log.Println("can0 is brought up")
        //return true

    case "restart":
        setRestart()
        log.Println("can0 is restarted")
        //return true

    default:
        log.Println("System cannot be brought up, contact administrator")
        //return false
    }
}


func bringUp (){
    cmd := exec.Command("sh", "-c", "sudo ip link set can0 type can bitrate 500000")

    cmd.Stdout = os.Stdout
    cmd.Stderr = os.Stderr

    err := cmd.Run()

    if err != nil {
        log.Fatal(err)
    }
}

func setRestart(){
    cmd:= exec.Command("sh", "-c", "sudo ip link set can type can restart-ms 10000")

    cmd.Stdout = os.Stdout
    cmd.Stderr = os.Stderr

    err := cmd.Run()

    if err != nil{
        log.Fatal(err)
    }
}

无论何时执行,都会进入“设置”的情况并开始执行BringUp函数,但是它永远无法完成执行,我也不明白为什么。我正在研究树莓派。

1 个答案:

答案 0 :(得分:3)

您的执行代码看起来正确。我认为问题在于sudo。我用sudo touch /tmp/bringUp-executed等良性命令替换了您的命令。代码确实提示输入我的sudo密码-但一旦输入-完全没有问题。

您是否以无头方式运行go-executable?因此无法访问控制台进行密码输入吗?我建议为您的任何根级任务创建包装器脚本,并为它们提供无密码的sudoer特权,如here所述。