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):
[EMAIL PROTECTED]:~>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
[EMAIL PROTECTED]:~>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