2015-04-07 6 views
1

Я использую следующий скрипт, чтобы перебирать список серверов, а затем выводить информацию о свободном диске. Клавиши SSH уже установлены и работают.Loop is not looping

Но это только вывод первого имени сервера, а затем существующего ... Я в тупике.

#!/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

ли хозяин вы подключаетесь требуют пароль? – lurker

+0

Пароли не используются - ключи SSH, и они работают. – Dan

+0

Я почти уверен, что вопросы по существу такие же, как и об этом, и ответили раньше. Найти его, конечно, будет сложно - если только список связанных вопросов не поможет, и это так. –

ответ

1

Это происходит потому, что вы подключаете к 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 3 и 3< открывает server-list.dat в качестве дескриптора файла 3.

+0

Грег, ты, рок, отлично работает. Благодаря! – Dan