Rumah >pembangunan bahagian belakang >Golang >Adakah mungkin untuk menjalankan perintah sudo secara berterusan tanpa menjalankan program itu sendiri sebagai sudo

Adakah mungkin untuk menjalankan perintah sudo secara berterusan tanpa menjalankan program itu sendiri sebagai sudo

WBOY
WBOYke hadapan
2024-02-09 18:03:081298semak imbas

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

editor php Banana ada di sini untuk menjawab soalan tentang bahasa Go: Adakah mungkin untuk menjalankan perintah sudo dalam Go tanpa menjalankan program itu sendiri sebagai sudo? Dalam bahasa Go, dengan menggunakan fungsi Perintah dalam pakej os/exec, kita boleh melaksanakan perintah sistem, termasuk perintah sudo, dalam program. Walau bagaimanapun, perlu diingatkan bahawa jika anda ingin melaksanakan perintah sudo dalam program Go, program itu sendiri mesti mempunyai kebenaran sudo. Jika tidak, program tidak akan berjaya melaksanakan perintah sudo. Oleh itu, jika anda ingin melaksanakan perintah sudo dalam program Go, adalah sangat penting untuk memastikan program itu sendiri mempunyai kebenaran sudo.

Kandungan soalan

Program ini menjalankan berbilang arahan yang memerlukan kebenaran sudo (seperti kemas kini sudo dnf). Memandangkan program harus dipasang menggunakan arahan go install, ia tidak boleh dijalankan sebagai sudo tanpa pengguna melengkapkan konfigurasi (setahu saya).

Program ini tidak memaparkan output kepada pengguna untuk memastikan output bersih. Untuk menunjukkan bahawa proses sedang berjalan, ia menggunakan pemutar daripada perpustakaan pemutar.

Bolehkah saya melakukan perkara-perkara ini?

  • Dapatkan kebenaran sudo dari dalam program
  • Jadikan program boleh dijalankan melalui sudo walaupun ia dipasang menggunakan go install
  • Tunjukkan output arahan sudo (termasuk permintaan kata laluan) tanpa ditindih oleh pemutar

Berikut ialah versi ringkas tentang perkara yang saya mahu kod lakukan:

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")
}

Penyelesaian

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

Dalam contoh ini, tambahkan sudo sebelum arahan yang anda mahu jalankan sebagai sudo dan selepas menjalankan program, sudo akan diminta untuk kata laluan, Jika anda menggunakan ini pada kod contoh, anda tidak akan melihat mesej permintaan kata laluan kerana Berputar bentuk akan menimpanya, tetapi jika anda mencuba ini tanpa memutar bentuk anda boleh melihatnya. Walaupun anda tidak melihat mesej, jika anda memasukkan kata laluan yang betul dan tekan Enter, arahan anda akan berfungsi seperti ini dalam sudo. Dengan cara ini anda tidak perlu menjalankan aplikasi sebagai sudo. Saya telah menjalankan arahan serupa menggunakannya dan ia berfungsi.

Atas ialah kandungan terperinci Adakah mungkin untuk menjalankan perintah sudo secara berterusan tanpa menjalankan program itu sendiri sebagai sudo. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Artikel ini dikembalikan pada:stackoverflow.com. Jika ada pelanggaran, sila hubungi admin@php.cn Padam