이 터미널 세션에 sudo 암호를 입력했는지 확인하는 방법은 무엇입니까?


16

헤드 라인에서 언급했듯이이 터미널 세션에 대해 sudo 비밀번호가 쉘에 입력되었는지 확인해야합니다 (일명 지금 sudo 권한이있는 경우).

내가 가지고 있다면, 나는 한 가지 일을하고 싶습니다. 내가 그것을 가지고 있지 않다면 그것을 요구하지 말고 다른 일을하도록하십시오.

의사 코드에서는 다음과 같습니다.

if (sudo = true)
   echo "i got sudo"
else
   echo "i dont have sudo"
fi

그러나 내가 찾은 모든 명령은 확인하려고 할 때 항상 sudo 비밀번호를 묻습니다.

기본 아이디어는 스크립트가 sudo 비밀번호를 여러 곳에 요청할 수 있고 "스크립트가 이제 sudo 비밀번호를 요청합니다"라는 메시지를 인쇄하고 싶지 않다는 것입니다. 이미 입력 한 경우 sudo 비밀번호를 요청하지 않습니다.

누군가 나를 도울 수 있기를 바랍니다.

답변:


21

당신이 사용할 수있는:

if sudo -n true 2>/dev/null; then 
    echo "I got sudo"
else
    echo "I don't have sudo"
fi

-n(비 대화식) 옵션을 사용 방지 sudo사용자에게 암호를 프롬프트에서. 명령을 실행하는 데 암호가 필요한 sudo경우 오류 메시지 (로 리디렉션 됨 /dev/null) 가 표시 되고 종료됩니다. 비밀번호가 필요하지 않은 경우이 표현식은 true sudo -n true 2>/dev/null입니다.


4
실제로 문자열을 에코하고 다른 문자열과 비교하는 데 도움이되지 않습니다. sudo의 종료 코드는 테스트에 충분합니다. 첫 번째 줄은if sudo -n true 2>/dev/null; then
Steven K

@StevenKath 그것은 똑같은 일을하지만 제안에 감사드립니다. 귀하의 제안이 더 우아하기 때문에 답변을 개선했습니다.
Radu Rădeanu

2
AskUbuntu는 알고 있지만 MacOSX에서는 작동하지 않습니다. sudo -n은 항상 0을 반환하므로 반환 코드를 확인하지 못합니다. 나는 이것을 검색했기 때문에 이것을 말하고 있으며이 페이지는 Google에 나타납니다.
Normadize

1
mail_badpasssudoers에서 암호 를 사용하도록 설정 하면 암호가 필요할 때마다 루트로 메일을 보내므로 좋지 않습니다 .
nyuszika7 시간
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.