我有一个命令,当发生特定错误时,我想重复该命令。为了使这个泛型成为可能,我想提出一个函数,该函数可以采用任何其他函数来基本包装该行为,这与repeat
ZSH中的非常相似。
所以我想要的是这样的:
repeatWhenError { someFunction() }
这将在花括号内重复该功能,直到成功执行为止。有没有在ZSH中实现此目标的简便方法?
从我的dotfiles中:
retry () {
retry-limited 0 "$@"
}
retry-limited () {
retry-limited-eval "$1" "$(gquote "${@:2}")"
}
retry-limited-eval () {
local retry_sleep="${retry_sleep:-0.1}"
local limit=0
local ecode=0
until {
test "$1" -gt 0 && test $limit -ge "$1"
} || {
eval "${@:2}" && ecode=0
}
do
ecode="$?"
ecerr Tried eval "${@:2}" "..."
sleep $retry_sleep
limit=$((limit+1))
done
return "$ecode"
}
gquote () {
\noglob : Use this to control quoting centrally.
print -r -- "${(q+@)@}"
}
ecerr () {
print -r -- "$@" >&2
}
用法:
retry someFunction
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句