< HomePage | Снимки
<- Понеделник, 5 Януари 2009 | Начална страница | Сряда, 7 Януари 2009 ->
Вторник, 6 Януари 2009

Отдавна бях забравил за този случай от преди почти две години, а и просто си мислех, че е странност на ffmpeg. Докато днес не ми се наложи да дебъгвам един скрипт, който се държеше странно. Лошото беше, че тук имах комбинация от стартиране на подпроцеси, четене на данни в главния процес и от време на време извикване на ssh, за да изпълня команда на отдалечена машина. Тъпото чудо при всяко пускане работеше до някъде, но всеки път стигаше до различно място в обработката и след това излизаше. Какво ли не правих докато ми светна, че и ssh-а изяжда стандартния вход и затова имам проблеми. Накратко, винаги трябва да се внимава при правене на шел скриптове, кое от къде чете и дали не изяжда данни. С други думи, това не работи за повече от първия запис във file:

while read HOST ; do echo $HOST ; ssh $HOST uptime; done < file

...а това работи коректно:

while read HOST ; do echo $HOST ; ssh $HOST uptime < /dev/null; done < file

Дано не ми се налага трети път да боря подобна глупост, защото е много неприятно.

[ Коментари: 4 ]
Коментари

би трябвало да става и с -n или -f
man ssh

Написа martin (www) на 09-Jan-2009 21:49


Още по-сложно :) Ако за всяка програма, която изяжда входа има отделна опция това е пътят към лудостта. Иначе си прав -n в случая би трябвало да свърши работа, -f е за съвсем друго.

Написа Георги Чорбаджийски (www) на 09-Jan-2009 22:04


for HOST in `cat FILE`; do echo $host; ssh $HOST uptime; done

Ето така не би трябвало да имаш проблеми. Даже може да си спестиш и cat-a

Написа nickless на 11-Jan-2009 10:59


А сега си представи, че файлът е във формат HOST COMMENT SOMETHING и ще видиш защо го правя с while и read :)

Написа Георги Чорбаджийски (www) на 11-Jan-2009 16:38