第一次迭代后循环退出

use*_*736 2 linux bash shell scripting

cat hosts.txt | while read h; do telnet $h; done
Run Code Online (Sandbox Code Playgroud)

当我运行此命令时,它将远程登录到第一个拒绝连接的主机,然后退出而不是遍历文件中的其他主机。为什么它在第一个主机之后退出循环,我该如何解决?

谢谢。

pax*_*blo 5

这在我的工作正常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
Run Code Online (Sandbox Code Playgroud)

但是,当我连接到拒绝连接的计算机时,得到:

$ 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.
Run Code Online (Sandbox Code Playgroud)

那是因为我实际上已成功连接,并且所有其他主机名都被发送到telnet会话。毫无疑问,这些都是用来尝试登录的,其余的主机名作为用户名/密码无效,因此会话被关闭。

如果您只想以交互方式登录到每个系统,则可以使用:

for h in $(cat hosts.txt); do telnet $h 1023; done
Run Code Online (Sandbox Code Playgroud)

这不会将其余主机名捕获到第一个成功的会话中。

如果要真正实现telnet会话的自动化,则应研究诸如之类的工具,expect或使用诸如的远程UNIX工具之一rsh