Bash 및 종료 코드에 스크립트가 포함되어 있어야 합니다.

Bash 및 종료 코드에 스크립트가 포함되어 있어야 합니다.

스크립트를 bash호출하는 스크립트 가 있습니다 .expect

Expect 스크립트에는 몇 가지 조건이 있습니다. 상자에 ssh를 연결하고 명령을 실행하면 다른 오류가 발생할 수 있습니다. 다음과 같은 종료 코드를 제공했습니다.

expect {
    "passwd: password updated successfully" {
    exit 0
    }
    "Password unchanged" {
    exit 1
    }
    "Bad: new and old password are too similar" {
    exit 2
    }
    "You must choose a longer password" {
    exit 3
    }
}

나는 이러한 종료 ​​코드를 가져와 다음과 같이 Expect 스크립트를 호출하는 bash 스크립트에서 사용할 계획입니다.

            if [ $? -eq 0 ]; then
            echo -e "\n"
            echo "Password successfully changed on $host by $user"

            elif [ $? -eq 1 ]; then
                echo "Failure, password unchanged"
            elif [ $? -eq 2 ]; then
                echo "Failure, new and old passwords are too similar"
            elif [ $? -eq 3 ]; then
                echo "Failure, password must be longer"
            else
                echo "Password failed to change on $host"
        fi

그러나 이것은 작동하지 않습니다. 예상 스크립트는 실패 여부에 관계없이 성공 시 0, 실패 시 1만 반환하는 것처럼 보입니다. 할당된 종료 코드를 검색하여 bash 스크립트에서 사용할 수 있습니까?

아니면 오류를 설명하기 위해 예상 스크립트에서 "send_user"를 사용하는 것이 더 낫습니까? 그렇다면 예상대로 "send_user" 명령의 출력을 사용하도록 bash 스크립트를 어떻게 얻을 수 있습니까?

답변1

더 쉬운 방법은 반복적인 검사 case대신 명령문을 사용하는 것입니다.$?

case "$?" in
    0) echo "Password successfully changed on $host by $user" ;;
    1) echo "Failure, password unchanged" ;;
    2) echo "Failure, new and old passwords are too similar" ;;
    3) echo "Failure, password must be longer" ;;
    *) echo "Password failed to change on $host" ;;
esac

답변2

반환 값을 임시 변수로 초기화해야 합니다. 이와 같이:

   ./my_expect_script.expect
   a=$?
   if [ $a -eq 0 ]; then
        echo -e "\n"
        echo "Password successfully changed on $host by $user"

        elif [ $a -eq 1 ]; then
            echo "Failure, password unchanged"
        elif [ $a -eq 2 ]; then
            echo "Failure, new and old passwords are too similar"
        elif [ $a -eq 3 ]; then
            echo "Failure, password must be longer"
        else
            echo "Password failed to change on $host"
    fi

관련 정보