Добавьте (собирают) коды выхода в ударе

Я использую следующее:

    using System.Web.Script.Serialization;       

    ...

    public static T ParseResponse<T>(string data)
    {
        return new JavaScriptSerializer().Deserialize<T>(data);
    }
9
задан mik 16 June 2009 в 09:14
поделиться

7 ответов

You might want to take a look at the trap builtin to see if it would be helpful:

help trap

or

man bash

you can set a trap for errors like this:

#!/bin/bash

AllowedError=5

SomeErrorHandler () {
    (( errcount++ ))       # or (( errcount += $? ))
    if  (( errcount > $AllowedError ))
    then
        echo "Too many errors"
        exit $errcount
    fi
}

trap SomeErrorHandler ERR

for i in {1..6}
do
    false
    echo "Reached $i"     # "Reached 6" is never printed
done

echo "completed"          # this is never printed

If you count the errors (and only when they are errors) like this instead of using "$?", then you don't have to worry about return values that are other than zero or one. A single return value of 127, for example, would throw you over your threshold immediately. You can also register traps for other signals in addition to ERR.

10
ответ дан 4 December 2019 в 07:48
поделиться

Быстрый эксперимент и погружение в информацию bash говорит:

declare -i RESULT=$RESULT + $?

, поскольку вы добавляете результат несколько раз, вы можете использовать объявление в начале, например:

declare -i RESULT=0

true
RESULT+=$?
false
RESULT+=$?
false
RESULT+=$?

echo $RESULT
2

, что выглядит много очиститель.

declare -i говорит, что переменная является целочисленной.

В качестве альтернативы вы можете избежать объявления и использования скобок в арифметических выражениях:

RESULT=$(($RESULT+$?))
15
ответ дан 4 December 2019 в 07:48
поделиться

Используйте конструкцию $ ((...)) .

$ cat st.sh
RESULT=0
true
RESULT=$(($RESULT + $?))
false
RESULT=$(($RESULT + $?))
false
RESULT=$(($RESULT + $?))
echo $RESULT
$ sh st.sh
2
$
1
ответ дан 4 December 2019 в 07:48
поделиться

О том, как складывать числа в Bash, также смотрите:

help let 
1
ответ дан 4 December 2019 в 07:48
поделиться

Вот несколько способов выполнить добавление в bash или sh:

RESULT=`expr $RESULT + $?`
RESULT=`dc -e "$RESULT $? + pq"`

И некоторые другие только в bash:

RESULT=$((RESULT + $?))
RESULT=`bc <<< "$RESULT + $?"` 

В любом случае статус выхода при ошибке не всегда равен 1, и его значение равно не зависят от уровня ошибки, поэтому в общем случае нет особого смысла сравнивать сумму статусов с порогом.

0
ответ дан 4 December 2019 в 07:48
поделиться

Как сказал Мувичиел, сбор суммы кодов возврата выглядит бессмысленным. Возможно, вы можете использовать массив для накопления ненулевых кодов результата и проверки его длины. Пример этого подхода приведен ниже:

#!/bin/sh

declare RESULT
declare index=0
declare ALLOWED_ERROR=1

function write_result {
    if [ $1 -gt 0 ]; then
        RESULT[index++]=$1
    fi
}

true
write_result $?

false
write_result $?

false
write_result $?

echo ${#RESULT[*]}
if [ ${#RESULT[*]} -gt $ALLOWEDERROR ] 
   then echo "Too many errors"
fi
0
ответ дан 4 December 2019 в 07:48
поделиться

Если вы хотите использовать ALLOWEDERROR в своем скрипте, поставьте перед ним знак $, например $ ALLOWEDERROR.

1
ответ дан 4 December 2019 в 07:48
поделиться
Другие вопросы по тегам:

Похожие вопросы: