首頁  >  文章  >  後端開發  >  是否可以在 go 中運行 sudo 命令而不將程式本身作為 sudo 運行

是否可以在 go 中運行 sudo 命令而不將程式本身作為 sudo 運行

WBOY
WBOY轉載
2024-02-09 18:03:081249瀏覽

是否可以在 go 中运行 sudo 命令而不将程序本身作为 sudo 运行

php小編香蕉在這裡為大家解答一個關於Go語言的問題:是否可以在Go中執行sudo指令而不將程式本身當作sudo運作?在Go語言中,透過使用os/exec套件中的Command函數,我們可以在程式中執行系統指令,包括sudo指令。但是,要注意的是,如果要在Go程式中執行sudo指令,程式本身必須具有sudo權限。否則,程式將無法成功執行sudo指令。因此,如果你希望在Go程式中執行sudo指令,確保程式本身俱有sudo權限是非常重要的。

問題內容

該程式執行多個需要 sudo 權限的命令(例如 sudo dnf update)。由於程式應使用 go install 命令安裝,因此如果沒有使用者完成配置,它就無法作為 sudo 運行(據我所知)。

程式不會向使用者顯示輸出以保持輸出乾淨。為了顯示進程正在運行,它使用微調器庫中的微調器。

可以做這些事嗎?

  • 從程式內取得 sudo 權限
  • 使程式可以透過 sudo 運行,即使是使用 go install 安裝的
  • 顯示 sudo 指令的輸出(包括密碼請求),而不被微調器覆寫

這是我希望程式碼執行的操作的簡化版本:

package main

import (
    "fmt"
    "os"
    "os/exec"
    "time"

    "github.com/briandowns/spinner"
)

func main() {
    // Spinner to show that it's running
    s := spinner.New(spinner.CharSets[14], time.Millisecond*100)
    s.Start()

    // Somehow execute this with sudo
    _, err := exec.Command(os.Getenv("SHELL"), "-c", "dnf update -y").Output()

    // Stop the spinner and handle any error
    if err != nil {
        fmt.Printf("Err: %s", err)
        os.Exit(1)
    }
    s.Stop()

    // Finish
    fmt.Println("Success")
}

解決方法

_, err := exec.Command(os.Getenv("SHELL"), "-c", "sudo dnf update -y"). Output()

在此範例中,在您想要作為sudo 運行的命令之前添加sudo ,並且在運行程式後,將詢問sudo 的密碼,如果將此應用於範例程式碼,您將看不到密碼請求訊息,因為旋轉圖形會覆蓋它,但如果您在沒有旋轉圖形的情況下嘗試此操作,您可以看到它。 即使您沒有看到該訊息,如果您輸入正確的密碼並按 Enter 鍵,您的命令也會像這樣工作須藤。這樣,您就不需要以 sudo 身分執行應用程式。我已經使用它運行了類似的命令,並且它們有效。

以上是是否可以在 go 中運行 sudo 命令而不將程式本身作為 sudo 運行的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:stackoverflow.com。如有侵權,請聯絡admin@php.cn刪除