2015-05-12 35 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