【发布时间】:2010-01-19 05:28:31
【问题描述】:
cat hosts.txt | while read h; do telnet $h; done
当我运行它时,它会远程登录到拒绝连接但随后退出的第一个主机,而不是循环文件中的其他主机。 为什么它在第一个主机之后退出循环,我该如何解决?
谢谢。
【问题讨论】:
-
脚本中还有什么?特别是里面有“set -e”吗?
标签: linux bash scripting shell
cat hosts.txt | while read h; do telnet $h; done
当我运行它时,它会远程登录到拒绝连接但随后退出的第一个主机,而不是循环文件中的其他主机。 为什么它在第一个主机之后退出循环,我该如何解决?
谢谢。
【问题讨论】:
标签: linux bash scripting shell
这在我的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
这不会将其余主机名捕获到第一个成功的会话中。
【讨论】:
telnet 是交互式的。你到底想做什么?如果你想自动化“telnet”会话,你可以使用 SSH
while read -r host
do
ssh <options> <commands> "$host"
done <"hosts.txt"
【讨论】:
如前所述,telnet 是一个需要输入的交互式程序。
猜测第一个之后的所有主机都被第一个 telnet 用作输入。
不清楚您的脚本试图做什么。也许您需要更清楚自己要做什么。
【讨论】: