我正在使用以下脚本遍历服务器列表,然后输出可用磁盘空间信息。 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
答案 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 3
和3<
打开server-list.dat
作为文件描述符3.