bash脚本:重复命令,如果它返回一个错误

我想创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;