linux - 如何开始监听stdin并重定向行?

时间:2012-06-24 10:08:18

标签: linux bash

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

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

我希望能够运行脚本,以便它开始“监听”stdin中的行并在循环中运行它们而不是$ @。 该脚本将通过正常终止 - ctrl + c ..

停止工作

有什么想法吗?

2 个答案:

答案 0 :(得分:2)

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

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

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

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

答案 1 :(得分:0)

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

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

$ @表示从命令行添加剩余参数,如果使用none,则不会添加任何

读取主机会读取该行 - 而不只是单词。

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

www.somehost.com
--> ssh -f myuser@www.somehost.com
www.somehost.com other parameters
--> ssh -f myuser@www.somehost.com other parameters