programing

성공할 때까지 bash에서 명령을 계속 실행할 수 있는 방법은 무엇입니까?

i4 2023. 5. 1. 19:57
반응형

성공할 때까지 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

반응형