Bash 尽管使用了ssh-n,但ssh仍会中断

Bash 尽管使用了ssh-n,但ssh仍会中断,bash,shell,Bash,Shell,尽管使用了ssh-n,但ssh仍会中断 我需要ssh到几个服务器并在那里运行一些命令。不幸的是,while循环中的ssh破坏了循环 有一个hosts.txt文件: 10.168.2.27 10.168.3.95 这是剧本: #!/bin/bash filename="$1" while read f1 do echo "Logging into $f1" ssh root@$f1 'hostname; uptime' < /dev/null done <

尽管使用了ssh-n,但ssh仍会中断

我需要ssh到几个服务器并在那里运行一些命令。不幸的是,while循环中的ssh破坏了循环

有一个hosts.txt文件:

10.168.2.27
10.168.3.95
这是剧本:

#!/bin/bash

filename="$1"
while read f1
do
     echo "Logging into $f1"   
     ssh root@$f1 'hostname; uptime' < /dev/null

done <"$filename"

我也尝试过ssh-n,但结果总是一样的,在hosts.txt的第1行之后循环被中断

我的脚本有什么问题?

如果未找到换行符,则read的退出状态为非零,因此尽管它将读取文件中剩余的内容,但不会输入循环体。有两种解决方案:

确保您正在读取符合POSIX的文本文件,这意味着每一行都以\n结尾

把你的情况改为

while read f1 || [ -n "$f1" ]; do
只要read能够读取某些内容,它将具有非零退出状态


第一个选项更可取。

只是确认一下,远程命令是否成功执行,如果ssh被注释掉,循环是否会在整个文件上迭代?我看不出你的代码有任何明显的错误。另外,hosts.txt真的只有两行吗?一种可能性是,它不会在第一行之后中断,而是在最后一行退出,如果host.txt没有以换行符结尾,就会发生这种情况。啊,真是愚蠢的错误。。第二行末尾没有换行:谢谢你给我指那个。