2015-05-12 3 views
1

Я хочу, чтобы запустить команду п число раз, если она возвращает безуспешными я начал с ниже петликоманда запуска до успешного п раз Баш

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

Я хочу, чтобы запустить примерно в п раз, прежде чем он идет продолжается до следующего файла Не знаю, как я могу продолжить здесь. Я попытался использовать возвращаемую переменную $? и цикл с помощью этого, но не везло Кроме того, как я мог бы использовать вышеупомянутую петлю или, что предлагается здесь, чтобы поставить вывод находку в переменной благодаря

Позвольте мне сделать это ABIT понятнее

так что я «м на самом деле работает, как это с функцией

fcn() { 

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

Calling с

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

так в отставке Урна значение md5sum "$file" это один я смотрел в

+0

Вы хотите, чтобы 'n' успешно возвратили или' n' пытались получить успешное возвращение? Вам нужны попытки для каждого файла или для всего поиска-команды? Также вы [Не хотите читать строки с 'for'] (http://mywiki.wooledge.org/DontReadLinesWithFor) (или' до' в этом случае). –

+0

поэтому n пытается получить успешный доход ... так что n попыток в файле до его продолжения – AShah

+1

Вы, вероятно, не интересуетесь статусом выхода 'find'. 'find' будет успешным, если команда' md5sum' не будет выполнена. – chepner

ответ

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

выше установит результаты успешной команды находят в переменную result. Если попытки превышают пять, тогда цикл закончится, но значение result неясно, если это произойдет.

0

Вы можете проверить результат команды в переменной среды $?

Эта переменная будет содержать значение 0, если последняя команда выполнена успешно.

Мое предположение было бы что-то вроде этого:

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

Помните, что если что-то выполняется после вашей команды, значение $? изменится. Поэтому просто убедитесь, что всякий раз, когда вы выполняете указанную команду, сохраните значение $? в другой переменной или сразу же проверьте его.

+0

Я пробовал это, но это не дает мне то, что мне нужно – AShah

+0

Mmm .. в первый раз через цикл вы проверите '$?' перед выполнением каких-либо команд ... –

+0

@MarkSetchell true, это будет проблемой. – pwhy

Смежные вопросы