php 편집기 Banana는 Go 언어에 대한 질문에 답하기 위해 왔습니다. 프로그램 자체를 sudo로 실행하지 않고도 Go에서 sudo 명령을 실행할 수 있습니까? Go 언어에서는 os/exec 패키지의 Command 함수를 사용하여 프로그램에서 sudo 명령을 포함한 시스템 명령을 실행할 수 있습니다. 그러나 Go 프로그램에서 sudo 명령을 실행하려면 프로그램 자체에 sudo 권한이 있어야 합니다. 그렇지 않으면 프로그램이 sudo 명령을 성공적으로 실행할 수 없습니다. 따라서 Go 프로그램에서 sudo 명령을 실행하려면 프로그램 자체에 sudo 권한이 있는지 확인하는 것이 매우 중요합니다.
이 프로그램은 sudo 권한이 필요한 여러 명령(예: sudo dnf update)을 실행합니다. 프로그램은 go install
명령을 사용하여 설치해야 하므로 사용자가 구성을 완료하지 않으면 sudo로 실행할 수 없습니다(내가 아는 한).
프로그램은 출력을 깔끔하게 유지하기 위해 사용자에게 출력을 표시하지 않습니다. 프로세스가 실행 중임을 표시하기 위해 스피너 라이브러리의 스피너를 사용합니다.
이런 일을 할 수 있나요?
go install
다음은 코드에서 수행하려는 작업의 단순화된 버전입니다.
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에서 비밀번호를 묻는 메시지가 나오며, 이것을 예시 코드에 적용하면 Rotating이기 때문에 비밀번호 요청 메시지가 표시되지 않습니다. 모양이 덮어쓰게 되지만, 모양을 회전하지 않고 시도하면 볼 수 있습니다. 메시지가 보이지 않더라도 올바른 비밀번호를 입력하고 Enter 키를 누르면 sudo에서 명령이 이렇게 작동합니다. 이렇게 하면 애플리케이션을 sudo로 실행할 필요가 없습니다. 나는 그것을 사용하여 비슷한 명령을 실행했으며 작동했습니다.
위 내용은 프로그램 자체를 sudo로 실행하지 않고 go에서 sudo 명령을 실행할 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!