2013-04-16 2 views
0

У меня есть сканирование скриптов через файл, каждая строка - имя хоста удаленного узла.Почему SSH прерывает поток управления в Bash

echo -e "node1\nnode2\nnode3" > tempfile 
while read aline; do 
    echo "@$aline"; 
done < tempfile 

это производит @node1@node2 и @node3 правильно в трех линиях. Но когда я добавляю ssh внутри цикла следующим образом

while read aline; do 
    echo "@$aline"; 
    ssh $aline 'jps'; 
done < tempfile 

Петля сломается после первого вызова ssh и гравюр только @node1 (без @node2 и `@node3).

Я спрашиваю, что произошло за сценой (это похоже на неопределенное поведение)? И как реализовать одну и ту же функциональность, не нарушая цикл while.

+1

Try 'SSH -n $ выравнивать 'JPS';' –

ответ

4

SSH делает что-то с stdin (который перенаправляется с tempfile) и испортил read s. Попробуйте перенаправить stdin.

ssh -n $aline 'jps' 

От man ssh:

-n Перенаправление стандартного ввода из/DEV/нуль (на самом деле, предотвращает чтение из стандартного ввода).

+0

... или 'SSH -n $ выравнивать«jps'' –

+0

@PaulTomblin Хороший вызов. –

Смежные вопросы