Я стучал головой о стену какое-то время с этим.
Я хочу, чтобы SSH в набор машин и проверить, доступны ли они (прием соединений и не используется). Я создал небольшой script, tssh, который делает именно это:
#!/bin/bash
host=$1
timeout=${2:-1}
ssh -qo "ConnectTimeout $timeout" $host "[ \`who | cut -f1 | wc -l \` -eq 0 ] && exit 0 || exit 1"
Этот script работает правильно. Возврат 255, если возникла проблема с подключением, 1, если машина занята, и 0, если все хорошо. Если кто-то знает лучший способ сделать это, пожалуйста, дайте мне знать.
Итак, я попробую позвонить tssh на свой набор машин, используя цикл чтения while, и здесь все идет не так. Цикл завершается, как только tssh возвращает 0 и никогда не завершает полный набор.
while read nu ; do tssh "MYBOXES$nu" ; done < <(ruby -e '(0..20).each { |i| puts i }')
Сначала я подумал, что это проблема подоболочки, но, видимо, нет. Любая помощь, наряду с комментариями по стилю/контенту, была бы высоко оценена! Я знаю, что собираюсь ударить себя, когда узнаю, почему...