bash 스크립트 : 오류를 반환하면 명령을 반복하십시오. 잘 모르겠습니다. 이런 식으로

오류를 반환하면 ncftp 전송을 반복하는 루프를 만들고 싶습니다.

종료 코드 변수를 루프에서 어떻게 사용할 수 있는지 잘 모르겠습니다. 이런 식으로 작동합니까?

until [$? == 0]; do
    ncftpput -DD -z -u user -p password remoteserver /remote/dir /local/file
done



답변

serverfault의 다른 곳 에서이 우아한 루프의 기초를 찾았습니다. 명령 자체에서 직접 테스트 할 수 있으므로 종료 코드를 저장할 필요가 없습니다.

until ncftpput -DD -z -u user -p password remoteserver /remote/dir /local/file; do
  echo Tansfer disrupted, retrying in 10 seconds...
  sleep 10
done


답변

거의. 루프 전에 미리 설정할 수 있도록 반환 값을 변수로 저장하는 것이 좋습니다. 그렇지 않으면 마지막 실행 명령의 영향을받습니다.

sleep너무 빨리 리스폰되는 것을 막기 위해 슬링 인을 넣을 수도 있습니다 .

RET=1
until [ ${RET} -eq 0 ]; do
    ncftpput -DD -z -u user -p password remoteserver /remote/dir /local/file
    RET=$?
    sleep 10
done


답변

조금 해 키지 만 내 솔루션은 실패로 종료되면 자체 실행되는 bash 함수를 만드는 것입니다.

function retry { the_command_you_want && echo "success" || (echo "fail" && retry) }; retry


답변

명령이 오류를 반환하는 동안 루프를 수행 할 수 있습니다.

    while [ -n $(ncftpput -DD -z -u user -p password remoteserver /remote/dir /local/file) ]; do
            sleep 1;
    done;


답변