Toon posts:

Hoe meerdere stdout streams samenvoegen?

Pagina: 1
Acties:

Verwijderd

Topicstarter
Geachte Linux experts,

Ik probeer het volgende voor elkaar te krijgen, maar twijfel eraan of het wel mogelijk is met Linux: De stdout data van verschillende programma's moet achter elkaar worden geplakt tot 1 enkele data stream die je naar de stdin van een volgend programma kan sturen. Dus:
  • Programma A doet zijn werk, data word uitgespuugd op zijn stdout
  • Programma C consumeert de data van programma A op de stdin
  • Programma A is klaar, programma B begint met spugen
  • Programma C heeft niets gemerkt van de 'wissel' en gaat gewoon door met consumeren van B
De data die de programma's in kwestie op hun stdout uitspugen is te groot om in een temporary file op te slaan.

Is hier misschien iemand die dit eens heeft geprobeerd/gedaan?

  • Parasietje
  • Registratie: Juli 2004
  • Laatst online: 10-06-2024

Parasietje

linux-geek

code:
1
2
3
4
5
6
#!/bin/bash
# programma's met te processen output
ProgramA | tee mytmpfile
ProgramB | tee mytmpfile
rm mytmpfile
killall ProgramC


code:
1
2
3
#!/bin/bash
# programma om boel te verwerken
tail -f mytmpfile | ProgramC


Werken met een temporary file i.p.v. moeilijk te gaan doen.

[ Voor 7% gewijzigd door Parasietje op 21-05-2005 23:32 . Reden: "rm mytmpfile" toegevoegd ]

WebDAV in Vista is horribly broken. Ik wil het fixen, maar ben nog steeds op zoek naar de tarball met de source...


  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 10-02 15:42

Janoz

Moderator Devschuur®

!litemod

Kun je niet gewoon iets doen als:

bestandje AB
code:
1
2
3
#!/bin/bash
A
B

en vervolgens

> AB | C

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


Verwijderd

Topicstarter
Hmm... Heb ik niet voor beide van deze oplossingen temporary files nodig? De datastroom is zo groot dat ie niet even op schijf gestald kan worden.

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 10-02 15:42

Janoz

Moderator Devschuur®

!litemod

Ik zie nergens in mijn oplossing een tempfile gebruikt worden ;)

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


Verwijderd

Topicstarter
Janoz:

Aah, nu begrijp ik wat je bedoelt. :) Is inderdaad een slimme oplossing. Eens even in het Bash handboek kijken of je niet binnen 1 bash script een subshell kan maken, dan kan je dit zelfs binnen een script doen.... Alles wat binnnen 1 shell wordt uitgespuugd wordt natuurlijk netjes als 1 enkele stream naar stdout gestuurd.

Bedankt!

  • kenneth
  • Registratie: September 2001
  • Niet online

kenneth

achter de duinen

code:
1
(blaat ; foo) | xyzzy
:?

Look, runners deal in discomfort. After you get past a certain point, that’s all there really is. There is no finesse here.


  • mvdejong
  • Registratie: Juni 2000
  • Laatst online: 29-11-2024

mvdejong

When does the hurting stop ?

Volgens mij zoek je gewoon :
code:
1
( A ; B ) | C

The number of things that Arthur couldn't believe he was seeing was fairly large


  • mvdejong
  • Registratie: Juni 2000
  • Laatst online: 29-11-2024

mvdejong

When does the hurting stop ?

ALL TOGETHER NOW !!!!

The number of things that Arthur couldn't believe he was seeing was fairly large


  • kenneth
  • Registratie: September 2001
  • Niet online

kenneth

achter de duinen

GMTA ;)

Look, runners deal in discomfort. After you get past a certain point, that’s all there really is. There is no finesse here.


Verwijderd

Topicstarter
Whooaaahh..

Bash is prachtig.

Iedereen bedankt!

_/-\o_

  • kenneth
  • Registratie: September 2001
  • Niet online

kenneth

achter de duinen

Om 't nog leuker te maken :P

code:
1
(foo && bar) | blaat
Dan wordt bar alleen uitgevoerd als foo succesvol heeft gedraaid.
code:
1
(foo || bar) | blaat
Dan wordt bar alleen uitgevoerd als foo niet succesvol heeft gedraaid.

Look, runners deal in discomfort. After you get past a certain point, that’s all there really is. There is no finesse here.


Verwijderd

Dit is overigens niet typisch bash, de originele sh (bourne-shell) kon dat ook al, en csh (C-Shell) ook.

  • kenneth
  • Registratie: September 2001
  • Niet online

kenneth

achter de duinen

Goh, nu je het zegt, ik heb het allemaal lopen testen in tcsh ... weet ik vele dat dat de standaardshell is onder FreeBSD :P

Look, runners deal in discomfort. After you get past a certain point, that’s all there really is. There is no finesse here.

Pagina: 1