Я пытаюсь написать скрипт bash, который выполняет следующие действия:
- открыть 8 терминалов Tmux
- каждый из терминалов подключается в SSH к удаленному серверу
- запустить скрипт X на 3 сервере, и когда это будет сделано
- запустить другой скрипт Y на 3 разных серверах
Операции (особенно последние две) должны выполняться в этом точном порядке. Мне удалось создать все терминалы tmux, но я вижу, что по каким-то причинам tmux настолько быстро выполняет команды, что не ожидает завершения команды.
Например, просто написать:
tmux send-keys -t 0 "ls"
В скрипте не всегда выдают полный список файлов, содержащихся в домашней папке.
То же самое происходит с двумя сценариями на разных серверах, иногда он выполняет Y до X.
Это мой сценарий:
######################################
# Setup tmux
######################################
tmux new-session -d -s sss
tmux new-window -t sss
for (( i = 0; i < 3; i++ )); do
tmux split
tmux select-layout even-vertical
done
for (( i = 0; i < 8; i=i+2 )); do
tmux select-pane -t $i
tmux split-window -h
done
######################################
######################################
# Ssh Connection
######################################
for (( i = 0; i < 8; i++ )); do
tmux send-keys -t $i "$connection ${port[$i]}" C-m
done
######################################
for (( i = 0; i < 3; i++ )); do
tmux send-keys -t $i "cd scripts" C-m
tmux send-keys -t $i "./X.sh" C-m
done
for (( i = 3; i < 6; i++ )); do
tmux send-keys -t $i "cd scripts" C-m
tmux send-keys -t $i "./Y.sh ${servers_ips[${i}-3]}" C-m
done
Обновить
Кроме того, как я могу ждать завершения команды в той же панели tmux? Как делать что-то еще только после выполнения длинной команды
Заранее спасибо.