Bash 对多个主机使用不同参数的PSSH命令

Bash 对多个主机使用不同参数的PSSH命令,bash,scripting,parameter-passing,pssh,Bash,Scripting,Parameter Passing,Pssh,我正在尝试使用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

我正在尝试使用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变量并不能满足我的要求,但我真正想知道的是,在我从$actionList解析出正确的字符串后,pssh命令是否能正确运行于'list.txt'中的每个项目

有没有一种方法可以使同一个命令,改变文件中的参数与PSSH一起工作?有没有更好的程序来实现这一点?如果是,怎么做?感谢您的帮助

谢谢


另外,如果我对这篇文章进行了格式化或做了任何错误的事情,我道歉。StackOverflow通常是我最后的选择,所以我不经常使用它。再次感谢您的帮助/建议

我认为最好只使用一个循环,为输入文件的每一行运行ssh

while IFS=";" read host arg1 arg2; do
    echo "$arg1 and $arg2" | ssh "$host" "cat > arg1_and_arg2.txt" &
done < list.txt

我不认为pssh可以做你想做的事;它旨在运行不同主机上包含的相同命令参数。请注意,展开变量会创建文字引号(数据引号),而不是语法引号(bash将其解析为语法引号)。因此,你几乎肯定想把'从你的档案中删除。@chepner我害怕这个答案。。碰巧知道有没有其他实用程序/程序可以帮助实现这一点?@CharlesDuffy感谢您提供的信息!我会从现在开始改变的!我已经有了按顺序执行此操作的方法,但希望能够并行运行此命令以节省时间。@FranciscoTapia,请参阅&使运行ssh的管道在后台启动。因此,它确实并行运行代码。这里最明显的风险是它可能太并行了,如果您的主机列表比您启动并发进程所能负担的还要长,但使用xargs-P进行一点重构就可以解决这个问题。@CharlesDuffy哇,完全错过了“&”!是的,我可能需要在400多台主机上运行此命令,因此我需要限制并发进程的数量。我肯定会更多地研究这个解决方案,并用我的解决方案更新这个问题。再次感谢你的帮助!老实说,400个进程并不多,特别是因为每个进程在本地完成的工作量很小。在远程进程完成之前,每个进程几乎所有的时间都是在睡眠中度过的。@chepner这正是我所需要的!再次感谢你的帮助!必须研究查尔斯指出的“xargs”选项。现在一切都很好!