Могу ли я использовать команду тайм-аута в bash для блока кода? - PullRequest
0 голосов
/ 11 марта 2020

Я хотел бы использовать команду timeout, но она поддерживает только тайм-аут одной команды.

Моя цель - сделать что-то вроде этого - ожидание до тех пор, пока не истечет список портов:

timeout 60 for port in $ports
do
    while ! nc -zv localhost $port; do
        sleep 1
    done
done
if [[ $? -ne 0 ]]; then
    echo not all ports up on time
fi

Я хочу, чтобы for l oop остановился, если прошло 60 секунд, и проверил, был ли он успешным или нет.

Я понимаю, что могу добиться этого, используя что-то вроде:

timeout 60 bash -c "..."

Но это будет очень нечитаемо. Я думал, может быть, функция bash будет работать как команда, но она не работает ..

Есть идеи?

1 Ответ

0 голосов
/ 11 марта 2020

После некоторых тестов я успешно нашел способ реализовать это с помощью функций bash, хотя это выглядит немного странно, но все же более читабельно. Вот пример:

function my_loop() {
    for port in $ports; do
        while ! nc -zv localhost $port; do
            sleep 1
        done
    done
}

export -f my_loop
timeout 60 bash -c "my_loop"
if [[ $? -ne 0 ]]; then
    echo not all ports up on time
fi
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...