20秒間隔で5回コマンドを再試行したいです。このコマンドをメソッドパラメータとして渡したいと思います。どうすればいいですか?関数が作成されたら、値を関数に渡すにはどうすればよいですか?
現在のコードをパラメータセットを持つ関数に変換したいと思います。シェルスクリプトでこの関数をどのように作成して呼び出すのですか?
私の現在のコードは次のとおりです。
trialNumber=0
until [ $trialNumber -ge 5]
do
ssh $USERID@$HOST $SCRIPT_LOCATION/runme.sh # This line is my command and it may very with number of parameters or command itself.
[ $? -eq 0 ] && break
trialNumber=$[$trialNumber+1]
sleep 20
done
(上記のコードは複数の場所に挿入されていますが、それを関数に移動したいと思います。)
ベストアンサー1
retry() {
trialNumber=$1 delay=$2; shift 2
while [ "$trialNumber" -gt 0 ]; do
"$@" && return
ret=$?
sleep "$delay"
trialNumber=$(($trialNumber - 1))
done
return "$ret"
}
retry 5 20 ssh "$USERID@$HOST" "$SCRIPT_LOCATION/runme.sh"
最後はsleep
失敗する場合に備えて不要だが。次のような方が良いかもしれません。
retry() {
trialNumber=$1 delay=$2; shift 2
until "$@"; do
ret=$?
trialNumber=$(($trialNumber - 1))
[ "$trialNumber" -gt 0 ] || return "$ret"
sleep "$delay"
done
}