循环不循环

时间:2015-04-07 22:34:46

标签: bash unix ssh

我正在使用以下脚本遍历服务器列表,然后输出可用磁盘空间信息。 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

1 个答案:

答案 0 :(得分:1)

这是因为您将stdin附加到server-list.dat,但ssh也希望从stdin读取。

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

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.