у меня есть список серверов в файле, который я прохожу к следующему сценарию:Выполнение последовательных команд через SSH на нескольких серверах
#!/bin/bash
while IFS='' read -r line || [[ -n "$line" ]]; do
ssh_cmd="[email protected]$line"
ssh $ssh_cmd 'hostname && ls -l /path/to/folder | grep some_token' &
done < "$1"
То, что я хочу, выводимое так:
output from hostname (1)
output from ls -l (1)
output from hostname (2)
output from ls -l (2)
output from hostname (3)
output from ls -l (3)
Но они, кажется, перепутаны:
output from ls -l (1)
output from hostname (1)
output from hostname (2)
output from ls -l (2)
output from ls -l (3)
output from hostname (3)
Есть ли способ гарантировать, что эти команды выполняются последовательно?
Благодарим вас за консультацию!
Спасибо. Когда я удаляю конечный '&', скрипт выполняется только для первого элемента в списке. Является ли 'ssh' каким-то образом остальным содержимым? –
Причина, по которой моя петля не заканчивалась, заключалась в том, что ssh поглощал остальную часть потока stdin. Это были исправления, добавив флаг '-n' в мою команду' ssh': 'ssh -n user @ server command1 && command2' –
@PatMustard Отлично! Извините, я не думал об этом, рад, что вы его исправили! Я отредактирую его в своем ответе будущим читателям. –