循环不循环

Loop is not looping

我正在使用以下脚本遍历服务器列表,然后输出空闲磁盘 space 信息。 SSH 密钥已经到位并且可以使用。

但它只输出第一个服务器名称,然后是现有的...我很困惑。

#!/bin/bash

PATH=/bin:/usr/bin:/usr/sbin
export PATH

while IFS='|' read hostname nickname; do
    echo "$hostname: $nickname"  
    ssh $hostname "df -Pkhl"

done < server-list.dat

以及列表:

% cat server-list.dat
serverone|ONE
servertwo|TWO
serverthree|THREE

发生这种情况是因为您将标准输入附加到 server-list.dat,但 ssh 还希望从标准输入读取。

要解决此问题,您可以使用不同的描述符打开文件:

while IFS='|' read -u 3 hostname nickname; do
    echo "$hostname: $nickname"  
    ssh $hostname "df -Pkhl"

done 3< server-list.dat

使用 -u 33< 打开 server-list.dat 作为文件描述符 3。