bash에서 "true"의 목적은 무엇입니까 "if sudo true; then"

bash에서 "true"의 목적은 무엇입니까 "if sudo true; then"

나는 사용자에게 슈퍼유저 권한이 있는지 테스트하고 그렇지 않은 경우 슈퍼유저 권한을 요청하는 bash 스크립트를 작성했습니다. 궁극적으로 다음 두 줄을 삭제할 수 있도록 두 번째 "if" 문을 반대로 바꾸려고 합니다(echo "password ok" 및 다음 줄의 else).

# Root user only
if [[ "$EUID" != 0 ]]; then
    sudo -k # make sure to ask for password on next sudo
    if sudo true; then
        echo "Password ok"
    else
        echo "Aborting script"
        exit 1
    fi
fi

echo "do my ops"

네 번째 줄의 목적이 "true"라는 것은 단지 빈 진술일까요?

네 번째 줄에서 테스트를 반대로 해야 하는데 어떻게 해야 합니까? 내가 시도한 것은 다음과 같습니다.

if sudo false; then  
if sudo true == false; then
if [!(sudo true)]; then

답변1

truebash의 키워드가 아니며 성공적인 종료 코드로 즉시 종료되는 프로그램입니다. 마찬가지로 false실패한 종료 코드로 종료되는 프로그램입니다.

터미널에서 두 프로그램을 모두 실행한 다음 $?마지막 프로그램의 종료 코드가 포함된 변수를 읽어서 시도해 볼 수 있습니다.

true
echo $? # 0
false
echo $? #1

if sudo true와 같지 않습니다 if sudo == true. 을 사용하여 프로그램을 실행 if sudo true하고 종료 코드를 확인합니다.truesudo

그래서:

if sudo false; then프로그램이 sudo 로 실행 중입니다 false. 반환 값은 항상 false입니다.

if sudo true == falsetrue인수를 사용하여 ==프로그램 을 실행하고 . 이것은 분명히 당신이 원하는 것이 아닙니다.falsesudo

if [!(sudo true)]잘못된 구문입니다.

당신이 찾고 있는 것은

if ! sudo true;

답변2

허용된 답변이 실제로 귀하의 질문에 대한 답변이 아닌 것 같나요?

이것목적실제로 할 수 있는지 확인하려면 이렇게 하십시오 sudo.

어떻게이 확인은 true허용된 답변에 설명된 대로 프로그래밍 방식으로 수행됩니다.

답변3

이 스크립트에서 볼 수 있듯이. sudo가 활성화되어 있는지 확인하는 것뿐입니다.

true는 단순히 true를 반환합니다.

따라서 이 경우 sudo를 사용하여 명령을 실행해야 하는 경우 먼저 시작을 확인하고 비밀번호를 한 번만 묻습니다.

조건은 다음과 같이 작동합니다. sudo가 true 명령을 올바르게 실행하면 if 조건이 true를 반환하고 sudo가 활성화되고 사용자가 입력한 비밀번호가 정확합니다. 그렇지 않으면 잘못된 비밀번호를 입력했거나 sudo가 활성화되지 않아 스크립트가 계속 진행되어서는 안 됩니다. .

다른 명령은 인증이 처음으로 성공하므로 sudo 비밀번호를 요청할 필요가 없습니다(그러나 이는 sudo 구성에 따라 다르므로 이 스크립트는 환경 구성에 크게 의존합니다).

"echo Password ok"도 이를 증명합니다. 쉘 스크립트는 더 이상 비밀번호를 요구하지 않습니다.

관련 정보