반응형
성공할 때까지 bash에서 명령을 계속 실행할 수 있는 방법은 무엇입니까?
스크립트가 있어서 사용자에게 몇 가지 정보를 요청하려고 하지만 사용자가 이 정보를 입력할 때까지 스크립트를 계속할 수 없습니다.다음은 이를 달성하기 위해 명령을 루프에 넣으려는 시도이지만 어떤 이유에서인지 작동하지 않습니다.
echo "Please change password"
while passwd
do
echo "Try again"
done
저는 많은 종류의 while 루프를 시도해 보았습니다.
while `passwd`
while [[ "`passwd`" -gt 0 ]]
while [ `passwd` -ne 0 ]]
# ... And much more
하지만 작동이 안 되는 것 같아요.
until passwd
do
echo "Try again"
done
또는
while ! passwd
do
echo "Try again"
done
@Marc B의 대답을 자세히 설명하자면,
$ passwd
$ while [ $? -ne 0 ]; do !!; done
명령에 특정되지 않은 동일한 작업을 수행하는 좋은 방법입니다.
이 작업을 별칭(@Cyberwiz에 대한 찬사)으로 수행하려면 다음을 수행합니다.
alias rr='while [ $? -ne 0 ]; do eval $(history -p !!); done
테스트가 필요합니다.$?
대신 이전 명령의 종료 상태입니다. passwd
모든 것이 정상적으로 작동하면 0으로 종료되고, 암호 변경이 실패하면 0이 아닌 경우(암호 변경, 암호 불일치 등).
passwd
while [ $? -ne 0 ]; do
passwd
done
백틱 버전으로 암호의 출력을 비교하는 것은 다음과 같습니다.Enter password
그리고.confirm password
등등.
재시도 제한이 필요한 경우:
max_retry=5
counter=0
until <YOUR_COMMAND>
do
sleep 1
[[ counter -eq $max_retry ]] && echo "Failed!" && exit 1
echo "Trying again. Try #$counter"
((counter++))
done
무한 루프를 사용하여 다음을 수행할 수 있습니다.
while true
do
read -p "Enter password" passwd
case "$passwd" in
<some good condition> ) break;;
esac
done
while [ -n $(passwd) ]; do
echo "Try again";
done;
언급URL : https://stackoverflow.com/questions/5274294/how-can-you-run-a-command-in-bash-over-and-over-until-success
반응형
'programing' 카테고리의 다른 글
git blottom으로 이전 커밋을 보려면 어떻게 해야 합니까? (0) | 2023.05.01 |
---|---|
C#에서 공개, 비공개, 보호 및 액세스 수식어가 없는 것의 차이점은 무엇입니까? (0) | 2023.05.01 |
구성 요소에 대한 COM 클래스 팩토리 검색 실패 (0) | 2023.05.01 |
MongoDB bind_ip은 0.0.0으로 설정하지 않으면 작동하지 않습니다. (0) | 2023.05.01 |
Git: 로컬 변경을 실행 취소할 수 없습니다(오류: 경로...가 병합되지 않음). (0) | 2023.05.01 |