linux-如何开始收听stdin并重定向线路?

linux-如何开始收听stdin并重定向线路?,linux,bash,Linux,Bash,我编写了一个简单的脚本,它在给定的主机列表中运行,并在这些主机上执行给定的命令。 脚本基本上如下所示: while read host; do ssh -f $user@$host $@ echo < servers 读取主机时;做 ssh-f$user@$host$@ echo ssh -f myuser@www.somehost.com www.somehost.com other parameters --> ssh -f myuser@www.somehost.com o

我编写了一个简单的脚本,它在给定的主机列表中运行,并在这些主机上执行给定的命令。 脚本基本上如下所示:

while read host; do
    ssh -f $user@$host $@
echo < servers
读取主机时
;做
ssh-f$user@$host$@
echo<服务器
我希望能够运行脚本,这样它就可以开始“侦听”stdin中的行,并在循环中运行它们,而不是$@。 脚本将通过正常终止(ctrl+c)停止工作


有什么想法吗?

你的脚本已经在这么做了!只需了解其工作原理-只需将其保存到某个.bash文件中:

user="myuser"
while read host; do
    ssh -f $user@$host $@
done
$@表示从命令行添加剩余参数,如果使用“无”,则将不添加任何参数

读取主机将读取行,而不仅仅是单词

因此,基本上,当您运行它时:

www.somehost.com --> ssh -f myuser@www.somehost.com www.somehost.com other parameters --> ssh -f myuser@www.somehost.com other parameters www.somehost.com -->ssh-fmyuser@www.somehost.com www.somehost.com其他参数
-->ssh-fmyuser@www.somehost.com其他参数如果我正确地阅读了这个问题,那么您希望向一组服务器发送一组命令,所有这些命令都是单独传递的

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

while read command; do
    while read host; do
        ssh -f $user@$host "$command"
        echo 
    done < servers
done
读取命令时;做
读主机时;做
ssh-f$user@$host“$command”
回音
完成<服务器
完成

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

这必须在bash中吗?
do
缺少一个
done
这是从脚本的命令行获取ssh参数,而不是标准输入。