[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

bash und named pipes (mkfifo)


Hallo Liste,

hier mal eine kleine Knobel-Aufgabe:

Das hier wuerde ich gerne machen:
bash$ mkfifo in
bash$ mkfifo out
bash$ while read cmd
> do
>   echo $cmd
> done < in | ssh server 'while read cmd
>   do
>     $cmd
>   done' > out
Und zwar so, dass nach einem
bash$ echo "ls" > in
das Konstrukt bestehen bleibt.

Nutze ich "while read cmd || true" anstatt "while read cmd" beendet sich das 
Konstrukt nicht, wie gewuenscht. Nur geht dann die CPU auf 100%.
Wie kann ich dem "while read cmd" beibringen, dass er nur lesen soll, wenn 
auch was kommt, aber gleichzeitig die Verbindung zur Pipe offen haelt sobald 
ein Kommando abgesetzt wurde?

Ein
bash$ while read cmd
> do
>   test -n "$cmd" && echo $cmd
> done
hilft da nur unwesentlich weiter, Load geht trotzdem (unnoetig?) hoch.

Ohje, beim tippen dieser Mail habe ich eine Loesung gefunden, schicke die Mail 
trotzdem mal raus, vlt. gibt es ja bessere Loesungen?

Also ich habe es wie folgt geloest:
bash$ while true
> do
>   while read cmd
>   do
>     echo $cmd
>   done < in
> done | ssh server 'while read cmd
>   do
>     $cmd
>   done' > out

Und noch gleich hinterher: Gibt es bessere Loesungen fuer mein Problem? Ich 
wuerde gerne ohne grosse Zeitverzoegerung Kommandos auf entfernten Server 
ausfuehren und die Ausgabe der Kommandos dann auswerten.
Jedes mal ein ssh-Connect ist mir zu teuer (Resourcen und Zeit).


-- 
Gruss
                                                          \|/
       eMHa                                              (o o)
------------------------------------------------------oOO--U--OOo--
 Markus Hochholdinger
 e-mail  mailto:Markus@xxxxxxxxxxxxxxxxx             .oooO
 www     http://www.hochholdinger.net                (   )   Oooo.
------------------------------------------------------\ (----(   )-
                                                       \_)    ) /
                                                             (_/



-- 
http://mailman.uugrn.org/mailman/listinfo/uugrn