0

我编写了一个简单的脚本,它通过给定的主机列表运行并在这些主机上执行给定的命令。该脚本基本上看起来像:

while read host; do
    ssh -f $user@$host $@
echo < servers

我希望能够运行脚本,以便它开始“侦听”来自标准输入的行并在循环中运行它们而不是 $@。该脚本将通过正常终止而停止工作 - ctrl +c..

任何想法?

4

2 回答 2

2

如果我正确阅读了这个问题,您想向一堆服务器发送一组命令,所有这些命令都是单独传递的。

为此,您应该将内部循环包装在外部读取循环中;类似于:

while read command; do
    while read host; do
        ssh -f $user@$host "$command"
        echo 
    done < servers
done

运行时,您可以键入命令并在所有服务器上执行。解决将 shell 转义字符发送到远程系统的问题是开发人员的一项练习。

于 2012-06-24T10:53:38.147 回答
0

您的脚本已经在这样做了!只需了解它是如何工作的 - 只需将其保存到 some.bash 文件中:

user="myuser"
while read host; do
    ssh -f $user@$host $@
done

$@ 表示从命令行添加剩余参数,如果使用none,它将添加none

读取主机将读取该行-而不仅仅是单词。

所以基本上,当你运行它时:

www.somehost.com
--> ssh -f myuser@www.somehost.com
www.somehost.com 其他参数
--> ssh -f myuser@www.somehost.com 其他参数
于 2012-06-24T10:33:47.057 回答