Vraag & Antwoord

OS Linux

[bash programmeren] waarom werkt dit niet?

7 antwoorden
  • [size=15:bb47092e82]Waarom werkt dit niet? :[/size:bb47092e82] $ [color=darkred:bb47092e82]sed -e 's/^/hallo: /' <&4 >&5 &[/color:bb47092e82] $ [color=darkred:bb47092e82]echo wilbert >&4[/color:bb47092e82] $ [color=darkred:bb47092e82]read p <&5[/color:bb47092e82] $ [color=darkred:bb47092e82]echo $p[/color:bb47092e82] hallo: wilbert $ in plaats daarvan klaagt bash dat 4 en 5 bad descriptors zijn. Hoe moet ik die dan van te voren openen?
  • Kan je misschien eerst uitleggen wat dat programmaatje volgens jou zou moeten doen? :wink:
  • een subproces (sed) starten, dat elke regel input die het krijgt weer uitvoert, met de tekst "hallo: " ervoor ('t is maar een voorbeeld). Daarna een regel naar de input van het proces schrijven, en vervolgens de output van het proces terug lezen. Meer algemeen is eigenlijk de vraag, hoe open ik een coproces waarvan ik input en output allebei kan connecten naar een filedescriptor in het script. En hoe open ik die files.
  • kijk zo werkt het wel: [color=darkred:40ad2f5a17]mkfifo a b sed 's/^/hallo: /' < a > b & exec 4>a 5<b echo wilbert >&4 read p <&5 echo $p[/color:40ad2f5a17] hallo: wilbert maar ik wil per se niet met named pipes (fifo's) werken, want die zijn traceerbaar in het filesystem, en ik wil niet dat andere processen eventueel in die fifo's schrijven oid. Met proces subsitution kan je alleen maar OF output OF input connecten, en ik wil ze allebei. Wie weet dé oplossing? EDIT: Dit werkt ook niet goed, doordat sed buffert. Maar 'tis maar een voorbeeld.
  • [code:1:762f6c4d61] sed 's/^/hallo: /' <$1 >$2 [/code:1:762f6c4d61] Aanroepen met ./scriptnaam file1 file2 waarbij file1 alle namen bevat (jan piet etc) en file 2 het resultaat zal bevatten. $1 is het eerste argument op de command line, $2 het tweede ($0 overigens het script zelf)
  • maar de grap is dat ik juist wil dat de beide datastromen nooit ergens op de schijf komen, maar worden uitgewisseld door pipes.
  • Volgens mij kan dat niet in bash. Tenzij je op een of andere manier een manier vind om de functie pipe(2) in bash uit te voeren.

Beantwoord deze vraag

Weet jij het antwoord op deze vraag? Registreer of meld je aan met je account

Dit is een gearchiveerde pagina. Antwoorden is niet meer mogelijk.