Команда PSSH с разными аргументами для нескольких хостов

Я пытаюсь написать сценарий bash, используя PSSH, который отправляет одну и ту же команду, но разные аргументы в зависимости от хоста. Имя хоста и аргументы будут извлечены из другого файла "list.txt".

Пример файла list.txt будет выглядеть так:

10.0.0.1;'hello';'world'
10.0.0.2;'goodbye';'everyone'
10.0.0.3;'thank';'you!'

Пример того, что у меня есть (но, к сожалению, не работает), показано ниже:

#!/bin/bash

# grab the list items and make them into a variable to be able to parse
actionList=$(</root/scripts/list.txt)

# parse out host name for pssh
host_name="$( cut -d ';' -sf 1 <<< "$actionList" )";

# parse out the first argument 
argument1="$( cut -d ';' -sf 2 <<< "$actionList" )";

# parse out the second argument
argument2="$( cut -d ';' -sf 3 <<< "$actionList" )";

# pssh command that creates a new file on each server with their respective argument1 and argument2 
pssh -i -AH $host_name -t 300 -O StrictHostKeyChecking=no "$(argument1) ' and ' $(argument2) >> arg1_and_arg2.txt" 

Я почти уверен, что сокращение переменной $ actionList не дает мне того, чего я хочу, но что я действительно застрял, так это то, будет ли эта команда pssh работать правильно для каждого элемента в list.txt после того, как я проанализировал правильные строки из $ actionList.

Есть ли способ сделать ту же команду, меняя аргументы из файла для работы с PSSH? Есть ли лучшая программа для этого? Если так, как? Любая помощь приветствуется.

Спасибо!

PS Если я отформатировал или сделал что-то не так с этим постом, прошу прощения. Stackru - это мое последнее средство, поэтому я не часто его использую. Еще раз спасибо за любую помощь / совет!

1 ответ

Решение

Я думаю, что вам лучше просто использовать цикл, который работает ssh для каждой строки входного файла.

while IFS=";" read host arg1 arg2; do
    echo "$arg1 and $arg2" | ssh "$host" "cat > arg1_and_arg2.txt" &
done < list.txt
Другие вопросы по тегам