commit
ed60d6666b
1 changed files with 52 additions and 0 deletions
@ -0,0 +1,52 @@ |
|||||
|
#!/bin/bash |
||||
|
|
||||
|
function retry () { |
||||
|
local i=5 delay=1 |
||||
|
while [ $i -gt 0 ]; do |
||||
|
i="$((i-1))" |
||||
|
|
||||
|
# save shell flags to restore them later |
||||
|
bash_flags="$-" |
||||
|
|
||||
|
# execute the given command |
||||
|
set +e |
||||
|
"$@" |
||||
|
ret=$? |
||||
|
|
||||
|
# restore flags since we modified them above |
||||
|
if [[ "$bash_flags" == *e* ]]; then |
||||
|
set -e |
||||
|
fi |
||||
|
|
||||
|
if [ $ret -gt 0 ]; then |
||||
|
echo "$1 failed. Retrying in $delay seconds..." |
||||
|
sleep $delay |
||||
|
continue |
||||
|
else |
||||
|
return 0 |
||||
|
fi |
||||
|
done |
||||
|
|
||||
|
echo "Giving up..." |
||||
|
return 1 |
||||
|
} |
||||
|
|
||||
|
function fail () { |
||||
|
echo "$@" |
||||
|
exit 255 |
||||
|
} |
||||
|
|
||||
|
echo "Testcase: false" |
||||
|
retry false |
||||
|
[ $? -gt 0 ] || fail "assert failed" |
||||
|
|
||||
|
echo |
||||
|
echo "Testcase: true" |
||||
|
retry true |
||||
|
[ $? -eq 0 ] || fail "assert failed" |
||||
|
|
||||
|
echo |
||||
|
echo "Testcase: random" |
||||
|
retry /bin/sh -c 'echo random; [ $RANDOM -lt 6000 ]' |
||||
|
|
||||
|
|
||||
Loading…
Reference in new issue