bash 脚本:如果返回错误则重复命令

bash 脚本:如果返回错误则重复命令

我想创建一个循环,如果返回错误则重复 ncftp 传输。

我不太确定如何在循环中使用退出代码变量。这样可行吗?

until [$? == 0]; do
    ncftpput -DD -z -u user -p password remoteserver /remote/dir /local/file
done

答案1

我在 serverfault 的其他地方找到了这个优雅循环的基础。事实证明,没有必要保存退出代码,因为您可以直接在命令本身上进行测试;

until ncftpput -DD -z -u user -p password remoteserver /remote/dir /local/file; do
  echo Tansfer disrupted, retrying in 10 seconds...
  sleep 10
done

答案2

差不多。您最好将返回值保存为变量,以便在循环之前预先设置它。否则它将受到上次运行命令的影响。

您可能还想将其吊sleep在那里以阻止其过快重生。

RET=1
until [ ${RET} -eq 0 ]; do
    ncftpput -DD -z -u user -p password remoteserver /remote/dir /local/file
    RET=$?
    sleep 10
done

答案3

有点 hack 但我的解决方案是创建一个 bash 函数,如果失败退出则自行运行

function retry { the_command_you_want && echo "success" || (echo "fail" && retry) }; retry

答案4

当命令返回错误时,您可以执行循环:

    while [ -n $(ncftpput -DD -z -u user -p password remoteserver /remote/dir /local/file) ]; do
            sleep 1;
    done;

相关内容