我正在尝试使用PSSH编写bash脚本,该脚本会根据主机发送相同的命令但传递不同的参数。主机名和参数将从另一个文件“ 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更改文件中的参数?有更好的程序可以做到这一点吗?如果可以,怎么办?任何帮助表示赞赏。
谢谢!
P.S。如果我对此帖子进行了格式设置或发生任何错误,我深表歉意。通常,StackOverflow是我的最后选择,所以我不经常使用它。再次感谢您的帮助/建议!
答案 0 :(得分:1)
我认为您最好只对输入文件的每一行使用运行ssh
的循环。
while IFS=";" read host arg1 arg2; do
echo "$arg1 and $arg2" | ssh "$host" "cat > arg1_and_arg2.txt" &
done < list.txt