#!/bin/bash echo "Параллельное выполнение скриптов и развёртывание вёб-сайтов на сервере codeberg." # выполнение скрипта внутри каталога вёб-сайта function pages2 { dir="pomodoro${1}" && red="\e[91m" && green="\e[92m" && norm="\e[0m" # соответствующая строка для вывода сообщений по ходу выполнения функции num="$((7 - ${1}))" && pre="\e[${num}A${dir}: " && aft="\e[K\e[${num}B\r" cd "$dir" || return pattern="^HTTP/[1,2].{,2}? [4,5]" printf "${pre}%s${aft}" "Создание репозитория на сервере." for ((ms1 = "$(date '+%s%3N')"; $(date '+%s%3N') - ms1 < 60000; pass = 0)); do # 1 Создание удалённого репозитория и проверка корректности ответов от сервера for ((dot = 1, ms2 = "$(date '+%s%3N')"; $(date '+%s%3N') - ms2 < 10000; dot++, remote = 0)); do ellipsis="$(seq -s '.' 0 "$dot" | tr -d '0-9')" case "$(./.repo_pages2.sh "remote" 2>/dev/null | tail -n+10 | grep -cE "$pattern")" in 0) remote=1 && break ;; *) printf "${pre}%s${aft}" "Ошибка 400-500 при подключении к серверу${ellipsis}" ;; esac done case "$remote" in 1) printf "${pre}%s${aft}" "Создание локального репозитория." ;; *) printf "${pre}%s${aft}" "Создание на сервере более 10 секунд." && continue ;; esac # 2 Создание локального репозитория и отправка данных на сервер ./.repo_pages2.sh "local" &>/dev/null # 3 Проверка корректности получения данных на сервере printf "${pre}%s${aft}" "Проверка доступности данных." for ((dot = 1, ms2 = "$(date '+%s%3N')"; $(date '+%s%3N') - ms2 < 10000; dot++, testing = 0)); do ellipsis="$(seq -s '.' 0 "$dot" | tr -d '0-9')" case "$(./.repo_pages2.sh "testing" 2>/dev/null | grep -cE "$pattern")" in 0) testing=1 && break ;; *) printf "${pre}%s${aft}" "Ожидание данных на сервере${ellipsis}" ;; esac done case "$testing" in 1) pass=1 && break ;; *) printf "${pre}%s${aft}" "Проверка данных более 10 секунд." ;; esac done case "$pass" in 1) printf "${pre}${green}%s${norm}${aft}" "Выполнено." ;; *) printf "${pre}${red}%s${norm}${aft}" "Ожидание более 60 секунд." ;; esac } export -f pages2 cd ../.. # выход из папки и из репозитория time_ms="$(date '+%s%3N')" # смещение курсора вниз на соответствующее количество строк printf 'pomodoro%s\n' {1..6} # обход всех вёб-сайтов и параллельный запуск функции для каждого printf 'pages2 "%s"\0' {1..6} | xargs -n1 -0 -P0 bash -c # замер продолжительности выполнения в миллисекундах, пересчёт в минуты, секунды и миллисекунды tms="$(($(date '+%s%3N') - time_ms))" && min="$((tms / 1000 / 60))" && sec="$((tms / 1000 % 60))" ms="$((tms % 1000))" && printf 'Общее время выполнения: %02d:%02d.%03d мс.\n' "$min" "$sec" "$ms"