我想创build一个循环,如果它返回一个错误,重复一个ncftp传输。
我有点不确定如何退出代码variables可以在循环中使用。 会这样的工作吗?
until [$? == 0]; do ncftpput -DD -z -u user -p password remoteserver /remote/dir /local/file done
我在serverfault的其他地方find了这个优雅循环的基础。 结果是没有必要保存退出代码,因为你可以直接在命令本身上进行testing;
until ncftpput -DD -z -u user -p password remoteserver /remote/dir /local/file; do echo Tansfer disrupted, retrying in 10 seconds... sleep 10 done
几乎。 您可能更好地将返回值保存为一个variables,以便您可以在循环之前预先设置它。 否则,它将受到最后一次运行命令的影响。
你也可能想要在那里停止sleep
,以免太快重新生成。
RET=1 until [ ${RET} -eq 0 ]; do ncftpput -DD -z -u user -p password remoteserver /remote/dir /local/file RET=$? sleep 10 done
有点不好意思,但我的解决scheme是创build一个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;