bash에서“true”의 목적은 무엇입니까? 그때” ask for password on

이 bash 스크립트를 해킹하여 사용자에게 수퍼 유저 권한이 있는지 여부와 권한이 없는지 테스트합니다. 궁극적으로 다음 두 줄을 제거 할 수 있도록 두 번째 ‘if’문을 뒤집으려고합니다 (에코 “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


답변

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

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

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

if sudo true에 해당하지 않습니다 if sudo == true. if sudo truetrue사용 하여 프로그램을 실행하고 sudo종료 코드를 확인하십시오.

따라서:

if sudo false; then프로그램 false을 sudo로 실행 중 입니다. 반품은 항상 거짓입니다.

if sudo true == falsetrue인수 ==false사용 하고를 사용하여 프로그램 을 실행합니다 sudo. 이것은 분명히 당신이 의도하고 싶지 않습니다.

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

아마 당신이 찾고있는 것은

if ! sudo true;

답변

수락 된 답변이 실제로 귀하의 질문에 답변하지 않은 것 같습니까?

이 작업 의 목적 은 실제로 할 수 있는지 확인하는 것 sudo입니다.

이 확인이 수행되는 방법true 은 승인 된 답변에 설명 된대로 프로그램을 통하는 것입니다.


답변

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

true는 true를 반환합니다.

따라서이 경우 sudo로 명령을 실행 해야하는 경우 처음 시작할 때 확인하여 암호를 한 번만 묻습니다.

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

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

‘echo password ok’도 마찬가지입니다. 쉘 스크립트는 더 이상 암호를 묻지 않습니다.