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

Re: Pipes und Fallunterscheidungen



Am Samstag, 31. Juli 2004 15:43 schrieb Michael Hierweck:
> ich habe das Problem, dass ich abhängig von einer Unterscheidung
> zwei Aktionen durchführen möchte. Da ganze läuft im Rahmen einer
> Pipe ab.
>
> program1 |((decision && action1) || action2) |program2
>
> decision, action1 und action2 müssen die Ausgabe von program1
> lesen. Die Ausgabe von action1 oder action2 muss an program2
> durchgereicht werden.
>
> Leider kann decision die Daten nicht durchreichen, d.h. auf
> stdout ausgeben.

Hm, es wäre eigentlich schön gewesen wenn Du dazu mal ein Beispiel 
gebracht hättest. Dann wäre die Diskussion nicht so abstrakt ;-)

> In der obigen Notation erreicht die Ausgabe von program1 die
> programme action1 bzw. action2 leider nicht.

Ja, kann sie auch nicht - sie wird ja an decision weitergereicht, 
was sie seinerseits nicht verteilen mag.

> Wie kann man das formulieren?

Eine Lösung wäre eine temp. Datei. Ich konstruiere mir mal ein 
Beispiel (eine Zeile):

jan@jack:~>getent passwd jan | tee jt.tmp | ( grep -q jan && cut -f1 
-d: jt.tmp || cut -f7 -d: jt.tmp ) | nl; rm jt.tmp
     1  jan
jan@jack:~>getent passwd jan | tee jt.tmp | ( grep -q jana && cut 
-f1 -d: jt.tmp || cut -f7 -d: jt.tmp ) | nl; rm jt.tmp
     1  /bin/bash

getent liest den Eintrag mit meinem Login-Namen aus der passwd und 
liefert die komplette Zeile zurück (program1). tee forkt die 
Ausgabe einmal nach stdout (und damit in die Pipe) und einmal in 
eine temp. Datei. grep sucht nach dem Suchmuster "jan"  oder 
"jana" (decision), die Option -q verhindert, dass was auf stdout 
ankommt. Je nach Resultat wird Feld 1 (action1) oder Feld 7 
(action2) aus der Zeile ausgeschnippelt, nl übernimmt den Part von 
program2, rm räumt auf.

hth
Jan

-- 
Linux-Quickies: http://www.jan-trippler.de
PingoS: http://www.pingos.org



Reply to: