Os Exec으로 쉘 명령 실행
Go에서 exec.Command()는 호스트 시스템에서 외부 명령을 실행하는 방법을 제공합니다. 그러나 여러 세그먼트가 포함되거나 셸 해석이 필요한 명령을 처리할 때는 추가 고려 사항이 필요합니다.
귀하의 경우 실행하려는 명령은 "sudo find /folder -type f | while read i; do sudo -S chmod 644 "$i"; done"에는 쉘 스크립트 요소가 포함되어 있으며 높은 권한으로 실행하려면 sudo 명령이 필요합니다. Go에서 이러한 명령을 효과적으로 실행하려면 이를 쉘 스크립트로 해석하도록 커널에 지시해야 합니다.
이 문제를 해결하려면 /bin/sh를 exec의 첫 번째 인수로 사용하도록 코드를 수정하면 됩니다. .Command() 및 전체 명령 문자열을 두 번째 인수로 전달합니다. 이는 커널이 셸(/bin/sh)을 사용하여 명령을 해석하고 실행하도록 지시합니다.
자세한 오류 메시지 가져오기
외부 명령이 실행될 때 실패하면 exec.Command()는 일반적으로 "종료 상태 1" 오류만 반환합니다. 더 자세한 오류 메시지를 얻으려면 cmd 개체의 Stderr 필드를 io.Writer 인터페이스를 구현하는 변수로 설정할 수 있습니다. 이를 통해 명령의 표준 오류 출력을 캡처하고 이를 검사하여 실패에 대한 보다 구체적인 정보를 확인할 수 있습니다.
예는 다음과 같습니다.
CombinedOutput() 메서드를 사용하면, 명령의 표준 출력과 표준 오류 출력을 모두 검색할 수 있습니다.
sudo 사용 효과적으로
Go에서 sudo로 명령을 실행할 때 Go 프로그램을 실행하는 사용자에게 sudo를 실행할 수 있는 충분한 권한이 있는지 확인하는 것이 중요합니다. 기본적으로 sudo에서는 사용자에게 비밀번호 입력을 요구하는데, 이는 프로그램 내에서 자동화하기 어려울 수 있습니다.
이 문제를 방지하려면 루트 권한을 높이지 않고 명령을 실행할 수 있는 방법을 제공하는 pkexec 패키지 사용을 고려해 보세요. .
위 내용은 Go에서 'sudo'를 포함한 복잡한 셸 명령을 어떻게 효과적으로 실행할 수 있나요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!