2015-05-12 34 views
1

我想运行的时间命令N多,如果返回不成功 我已经开始用下面的循环运行命令,直到成功N次庆典

until find . -type f -exec md5sum {} \; 
do 
<something > 
done 

我想它去之前运行约n倍继续到下一个文件 不知道我可以从这里继续。我曾尝试使用返回变量$?而使用这种循环,但没有运气 另外我如何使用上述循环或在此建议放什么的找到输出到一个变量 感谢

让我做这个升技更清晰

所以我“M实际运行这样一个功能

fcn() { 

    for file 
    do 
    until md5sum "$file" 
     do 
     <something > 
     done 
    done 
} 

find . -type f -print0 | xargs -0 -P 0 bash -c 'fcn "[email protected]"' 

所以RET调用的md5sum "$file"瓮值是一个我一直看着

+0

你想'n'成功返回或'n'试图获得成功的回报?你想尝试每个文件或每完整查找命令?此外,你[不想阅读'for'](http://mywiki.wooledge.org/DontReadLinesWithFor)(或在本例中为'until')行。 –

+0

所以n试图获得成功的回报......所以n在继续之前尝试文件 – AShah

+1

您可能对'find'的退出状态不感兴趣。无论是否有任何'md5sum'命令失败,'find'都会成功。 – chepner

回答

1
attempts=0 
while ! result=$(find . …) || ((attempts++ > 5)); do 
    … 
done 

以上将设置成功find命令的结果到变量result。如果尝试超过五次,则循环将结束,但如果发生这种情况,则result的值不清楚。

0

您可以检查在环境变量$?

命令的结果,这个变量将举行价值0如果最后执行的命令是成功的。

我的猜测是这样的:

while true; do 
    $(command) 
    if [ $? -eq 0 ] ; then 
     exit 
    fi 
done 

请记住,如果有什么是你的命令后执行的$?值会发生变化。因此,只要确保在执行此处遇到的命令时,将$?值保存在另一个变量中,或者立即检查它。

+0

我试过了这但它不给我我需要的东西 – AShah

+0

嗯..第一次通过循环,你会检查'$?'在执行任何命令之前...... –

+0

@MarkSetchell tr​​ue,这将是一个问题。 – pwhy