我想创建一个循环,如果返回错误则重复 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;