Загрузка данных


#!/bin/bash

# Функция для получения списка хостов из аргумента (файл или строка)
get_hosts() {
    local input="$1"
    if [[ -f "$input" ]]; then
        # Если это файл, читаем все непустые строки
        mapfile -t hosts < "$input"
    else
        # Иначе разбиваем по пробелам
        IFS=' ' read -ra hosts <<< "$input"
    fi
    echo "${hosts[@]}"
}

# ---- Режим с аргументами командной строки ----
if [ $# -ge 2 ]; then
    USER="$1"
    shift
    # Второй аргумент может быть строкой или файлом – объединяем все оставшиеся аргументы в одну строку
    INPUT="$*"
    HOSTS_ARRAY=($(get_hosts "$INPUT"))
    if [ ${#HOSTS_ARRAY[@]} -eq 0 ]; then
        echo "Ошибка: не найдено ни одного хоста."
        exit 1
    fi
else
    # ---- Интерактивный режим ----
    read -p "Введите имя пользователя: " USER
    read -p "Введите хосты (через пробел) или путь к файлу с хостами: " INPUT
    HOSTS_ARRAY=($(get_hosts "$INPUT"))
    if [ ${#HOSTS_ARRAY[@]} -eq 0 ]; then
        echo "Ошибка: не найдено ни одного хоста."
        exit 1
    fi
fi

# ---- Создание tmux-сессии ----
SESSION="parallel-ssh"

# Первый хост
tmux new-session -d -s "$SESSION" "ssh $USER@${HOSTS_ARRAY[0]}"

# Остальные хосты
for (( i=1; i<${#HOSTS_ARRAY[@]}; i++ )); do
    tmux split-window -t "$SESSION" "ssh $USER@${HOSTS_ARRAY[$i]}"
done

tmux select-layout -t "$SESSION" tiled
tmux set-window-option -t "$SESSION" synchronize-panes on
tmux attach-session -t "$SESSION"