
스크립트를 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