cat hosts.txt | while read h; do telnet $h; done
当我运行它时,它会telnet到第一个拒绝连接的主机,但是然后退出而不是循环遍历文件中的其他主机。 为什么它会在第一个主机之后退出循环,我该如何解决?
感谢。
答案 0 :(得分:4)
我的bash
:
$ cat hosts.txt
machine1
machine3
$ cat hosts.txt | while read h; do telnet $h; done
Trying 9.190.123.47...
telnet: Unable to connect to remote host: Connection refused
Trying 9.190.123.61...
telnet: Unable to connect to remote host: Connection refused
但是,当我连接到不拒绝连接的计算机时,我得到:
$ cat hosts.txt
machine2
machine1
machine3
$ cat hosts.txt | while read h; do telnet $h; done
Trying 9.190.123.48...
Connected to machine2.
Escape character is '^]'.
Connection closed by foreign host.
那是因为我实际连接成功并且所有其他主机名都被发送到telnet
会话。毫无疑问,这些用于尝试登录,其余主机名作为用户/密码无效,因此会话正在关闭。
如果您只想以交互方式登录每个系统,可以使用:
for h in $(cat hosts.txt); do telnet $h 1023; done
,它不会将其余的主机名捕获到第一个成功的会话中。
答案 1 :(得分:1)
telnet是互动的。你真的想做什么?如果要自动执行“telnet”会话,可以使用SSH
while read -r host
do
ssh <options> <commands> "$host"
done <"hosts.txt"
答案 2 :(得分:1)
如前所述,telnet是一个需要输入的交互式程序。
猜测第一个telnet之后的所有主机都被第一个telnet用作输入。
目前尚不清楚您的脚本尝试做什么。也许你需要更清楚你想要做什么。