Re: Pipes und Fallunterscheidungen

2004-08-02 Diskussionsfäden Jan Trippler
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



Re: Pipes und Fallunterscheidungen

2004-08-02 Diskussionsfäden Jan Trippler
Am Dienstag, 3. August 2004 01:15 schrieb Jan Trippler:
[...]
 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

Zusatz: Was ich nicht getestet habe, ist das Verhalten bei großen 
Dateien / großen Datenmengen, die durch die Pipes marschieren. Kann 
sein, dass dann decision zu früh zurückkommt und action1/2 startet 
bevor die temp. Datei komplett ist.

Jan

-- 
Linux-Quickies: http://www.jan-trippler.de
PingoS: http://www.pingos.org
TTS-HowTo: https://ssl.pingos.org/pingos/intern/ttshowto/rt.html



Re: Pipes und Fallunterscheidungen

2004-08-01 Diskussionsfäden Eduard Bloch
#include hallo.h
* Michael Hierweck [Sat, Jul 31 2004, 03:43:05PM]:

 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 

Das geht nicht. Du kannst in der Shell normalerweise nur an ein Programm
übergeben

 Ausgabe von action1 oder action2 muss an program2 durchgereicht werden.

Viele Sonderwünsche auf einmal und das willst du alles mit den wenigen
einfachen Bash-Konstruktionen kontrollieren. Vergiss es. 
Vorschlag: Perl. Haettest du die Aufgabe konkrett beschrieben, haette
man auch schon eine Loesung gefunden.

Gruss,
Eduard.
-- 
Man sollte mit größerer Achtung von dem sprechen, was man mit so viel
Verachtung das Zeitliche nennt. Ja, man sollte nur mit äußerster
Zurückhaltung von etwas anderem sprechen.
-- Rudolf G. Binding


-- 
Haeufig gestellte Fragen und Antworten (FAQ): 
http://www.de.debian.org/debian-user-german-FAQ/

Zum AUSTRAGEN schicken Sie eine Mail an [EMAIL PROTECTED]
mit dem Subject unsubscribe. Probleme? Mail an [EMAIL PROTECTED] (engl)



Pipes und Fallunterscheidungen

2004-07-31 Diskussionsfäden Michael Hierweck
Hallo,
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.
In der obigen Notation erreicht die Ausgabe von program1 die programme 
action1 bzw. action2 leider nicht.

Wie kann man das formulieren?
Danke für Tipps
Michael
--
Haeufig gestellte Fragen und Antworten (FAQ): 
http://www.de.debian.org/debian-user-german-FAQ/

Zum AUSTRAGEN schicken Sie eine Mail an [EMAIL PROTECTED]
mit dem Subject unsubscribe. Probleme? Mail an [EMAIL PROTECTED] (engl)


Re: Pipes und Fallunterscheidungen

2004-07-31 Diskussionsfäden Bernhard Wehmann
Am Samstag 31 Juli 2004 15:43 schrieb Michael Hierweck:
 Hallo,

 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.

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

 Wie kann man das formulieren?

Wenn ich das Problem richtig verstanden habe vielleicht so:

cat /etc/passwd | (export IFS=: ; 
while read a b c; 
do (
if test $a == root; 
then echo -n TREFFER $a  ; echo $a:$b:$c | wc; 
else echo NORMAL $a-:-$b-:-$c;
fi;
) done) | nl

Die Standardausgabe einer oder mehr Variablen zuweisen und die 
dann als Argument oder Standardeingabe (Pipe) der 
Fallunterscheidung und den Programmen übergeben.



Grüße Bernhard 


-- 
Haeufig gestellte Fragen und Antworten (FAQ): 
http://www.de.debian.org/debian-user-german-FAQ/

Zum AUSTRAGEN schicken Sie eine Mail an [EMAIL PROTECTED]
mit dem Subject unsubscribe. Probleme? Mail an [EMAIL PROTECTED] (engl)