我编写了一个简单的脚本,它通过给定的主机列表运行并在这些主机上执行给定的命令。该脚本基本上看起来像:
while read host; do
ssh -f $user@$host $@
echo < servers
我希望能够运行脚本,以便它开始“侦听”来自标准输入的行并在循环中运行它们而不是 $@。该脚本将通过正常终止而停止工作 - ctrl +c..
任何想法?
如果我正确阅读了这个问题,您想向一堆服务器发送一组命令,所有这些命令都是单独传递的。
为此,您应该将内部循环包装在外部读取循环中;类似于:
while read command; do
while read host; do
ssh -f $user@$host "$command"
echo
done < servers
done
运行时,您可以键入命令并在所有服务器上执行。解决将 shell 转义字符发送到远程系统的问题是开发人员的一项练习。
您的脚本已经在这样做了!只需了解它是如何工作的 - 只需将其保存到 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 其他参数