вторник, 26 апреля 2011 г.

[bash] Построчное чтение файла и ssh

Пишем мы скрипт на баше, и нужно нам считать файл построчно, это делается вот так
cat number.txt | while read line 
do
   echo $line
done
Но вот нам потребовалось сделать в теле цикла что то по ssh. Мы смело вставляем нужный код
cat number.txt | while read line 
do
   echo $line
   ssh user@127.0.0.1 "ls"
done
(представим что у нас настроена авторизация по открытому ключу).
И... и этот код будет работать не так как нам хотелось бы. Отработает только одна итерация цикла, не зависимо от того сколько строк в файле.

Проблема заключается в том что cat делает вывод в stdin из которого конвейером данные переходят в read. Но и ssh тоже использует stdin для своих целей и сливает все данные в себя (либо просто "забывает" их). И по когда управление будет снова передано на проверку условия, в stdin уже будет пусто и мы выйдем из цикла. Неожиданно ? да :)

Так как же нам решить эту проблему ? А вот так
exec 10<$PAIR_CONFIG
while read line <&10
do
   echo $line
   ssh user@127.0.0.1 "ls"
done
Мы связываем файловый дескриптор №10 с нужным нам файлом. И далее производим чтение уже из этого потока.

2 комментария:

  1. А можно просто использовать:
    ssh -n user@127.0.0.1 "ls"

    ОтветитьУдалить
  2. Lucky Luckyland Casino Review 2021 - Games, Bonuses & Games
    Luckyland Casino are 스핀토토 a casino which welcomes new players and the newest players. They offer a wide range of games from slots and 먹튀 검증 먹튀 랭크 live dealers, Visit Luckyland: Play Here!☑️ Welcome Bonus: 100% up to €100☑️ 실시간배팅 Mobile: Android,iPhone,iPad,Other Mobile Casinos: Slots 삼성 코엑스 Empire ™ Bonus 스포츠 토토 Offers: 50% up to €100

    ОтветитьУдалить