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): [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
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
#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
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
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)