Ausgabe von find an zwei Befehle weiterleiten
Hallo Leute, in einem Skript will ich die Ausgabe von find an zwei Befehle weiterleiten. Kann mir jemand ein Tip geben? gruss daniel
On Friday 19 August 2005 14:44, Daniel Weber wrote:
in einem Skript will ich die Ausgabe von find an zwei Befehle weiterleiten. Kann mir jemand ein Tip geben?
Aus der Kombination von "man bash" und "man tee" könnte man zu folgendem Schluß kommen: find ... | tee >(script1) | script2 Torsten
Am Freitag, 19. August 2005 15:24 schrieb Torsten Foertsch:
On Friday 19 August 2005 14:44, Daniel Weber wrote:
in einem Skript will ich die Ausgabe von find an zwei Befehle weiterleiten. Kann mir jemand ein Tip geben?
Aus der Kombination von "man bash" und "man tee" könnte man zu folgendem Schluß kommen:
find ... | tee >(script1) | script2
das geht nicht, 1. die sh mäkelt die ( ) an 2. denn tee schreibt seine Ausgabe ja nach stdout. aber man könnte folgendes machen: find ... | script1 | script2 wobei script1 seine Eingabe gleich nach stdout kopiert und dann seinen Job erledigt. Aber einfacher ist es, die Ausgabe von find in eine Datei zu schreiben und die beiden Scripte separt aufrufen. Jürgen -- Dr.rer.nat. Juergen Vollmer, Viktoriastrasse 15, D-76133 Karlsruhe Tel: +49(721) 92 04 871 Fax: +49(721) 92 04 872 Juergen.Vollmer@informatik-vollmer.de www.informatik-vollmer.de Internet-Telefonie: www.skype.com Benutzer: juergen.vollmer
On Friday 19 August 2005 15:34, Dr. Jürgen Vollmer wrote:
das geht nicht, 1. die sh mäkelt die ( ) an 2. denn tee schreibt seine Ausgabe ja nach stdout.
ich sagte nicht sh sondern bash. sh kann das nicht: $ (echo 1;echo 2) | tee >(sed 's/\(.*\)/script1: \1/' >&2) | sed 's/\(.*\)/script2: \1/' script2: 1 script2: 2 script1: 1 script1: 2 Beide sed's sehen also den Output der beiden echo's. Die Umleitung des stdout auf stderr des ersten Scripts ist nötig, denn es erbt seinen stdout ja von der shell. Damit ist stdout des ersten Scripts der selbe wie der des tee Kommandos. Somit würde er nochmal durch das 2. Script gefiltert: $ (echo 1;echo 2) | tee >(sed 's/\(.*\)/"script1: \1"/') | sed 's/\(.*\)/script2: \1/' script2: 1 script2: 2 script2: "script1: 1" script2: "script1: 2" Die ersten 2 Zeilen wurden von tee auf stdout geschrieben, die letzten 2 Zeilen wurden von tee an Script1 übergeben, von diesem gefiltert und auf stdout geschrieben. Alle 4 Zeilen wurden danach von Script2 bearbeitet. Torsten
Hallo, Am Fri, 19 Aug 2005, Torsten Foertsch schrieb:
On Friday 19 August 2005 15:34, Dr. Jürgen Vollmer wrote:
das geht nicht, 1. die sh mäkelt die ( ) an 2. denn tee schreibt seine Ausgabe ja nach stdout.
ich sagte nicht sh sondern bash. sh kann das nicht:
$ (echo 1;echo 2) | tee >(sed 's/\(.*\)/script1: \1/' >&2) | sed
Um die echos reichen {} (was eine subshell spart) und echo kann auch mehrere Zeilen ausgeben: echo -e '1\n2' Bei beiden seds geht uebrigens: sed 's/^/script1: /'. -dnh -- Bei den Menschen gibt es ja die verschiedensten Tiere. Esel,Hunde,Schweine,Ziegen,Gänse,Hühner, Affen. Also ein richtiger kleiner Zoo. [WoKo in dag°]
On Friday 19 August 2005 14:44, Daniel Weber wrote:
in einem Skript will ich die Ausgabe von find an zwei Befehle weiterleiten. Kann mir jemand ein Tip geben?
for i in `find ...`; do ... ; done Anstelle der ersten Pünktchen stelltst Du Deinen find Befehl und zwischen do und done kannst Du beliebig viele Befehle mit ${i} arbeiten lassen. Gruß, Achim
Hallo, Am Fri, 19 Aug 2005, Achim Schaefer schrieb:
On Friday 19 August 2005 14:44, Daniel Weber wrote:
in einem Skript will ich die Ausgabe von find an zwei Befehle weiterleiten. Kann mir jemand ein Tip geben?
for i in `find ...`; do ... ; done
*AUTSCH* Mach das mal mit Leer- und anderen Sonderzeichen in der find-Ausgabe. Besser: find ... | while read -r name; do machwas_mit_$name ... ; done -dnh --
Ach.Frisches Blut ist hier also nicht gern gesehen? Nur, wenn es von meiner Kettensaege tropft. [Erik Meltzer und Dieter Bruegmann in dag°]
participants (5)
-
Achim Schaefer
-
Daniel Weber
-
David Haller
-
Dr. Jürgen Vollmer
-
Torsten Foertsch