我使用下面的脚本循环遍历服务器列表,然后输出空闲磁盘空间信息。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发布于 2015-04-07 22:45:05
这是因为您将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 3和3<将server-list.dat作为文件描述符3打开。
https://stackoverflow.com/questions/29502556
复制相似问题