если команда верна в течение X секунд, запустите код в bash сценарии оболочки - PullRequest
0 голосов
/ 11 февраля 2020

Я хочу, чтобы оператор if выполнялся только в том случае, если условие в операторе истинно хотя бы в течение 3 последовательных секунд, как мне его достичь в linux bash сценарии оболочки? Я не делал этого раньше, и не мог найти что-то конкретное c, погуглив и был бы очень признателен за любую помощь! я не имею в виду как al oop, который выполняет условие x раз, но функция, которая проверяет условие, является истинной, по крайней мере, x последовательных секунд / минут, прежде чем запускает блок кода.

заранее спасибо

Ответы [ 2 ]

0 голосов
/ 11 февраля 2020

Проверьте это один раз, подождите 3 se c и проверьте еще раз, что-то вроде этого

$ test=
 [[ $test ]] && { sleep 3; [[ $test ]]; } && echo ok || echo fail
fail

$ test=1
$ [[ $test ]] && { sleep 3; [[ $test ]]; } && echo ok || echo fail
ok
0 голосов
/ 11 февраля 2020

Вы можете определить эту функцию:

check_cond() {
    local stop=$(($(date +%s)+3))
    while :; do
        cond && return 1
        [ $(date +%s) -gt $stop ] && break
    done
}

Возвращает 1, если cond ложно в течение 3 секундного периода времени. В противном случае возвращается 0.

...