오류를 반환하면 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;