Re: sed und regex

From: Franz Urbanski <fou(at)ON-Luebeck.DE>
Date: Wed, 7 Jan 2004 15:47:05 +0100

On Wed, Jan 07, 2004 at 02:44:20PM +0100, Simon 'corecode' Schubert wrote:

> 1. cat muss gestartet werden (evtl ein Builtin, aber egal)
> 2. sed muss gestartet werden
> 3. eine Pipe muss zwischen Prozess (1) in Richtung Prozess (2) erzeugt
> werden. Das setzt nun also voraus, dass Prozess (2) bereits existiert,
> sonst koennte man ja stdout nicht auf dessen stdin draufschrauben.
> 4. Die Ausgabeumleitung muss auch eingestellt werden. Das setzt
> wiederum voraus, dass stdout von Prozess (2) bereits umgeleitet ist,
> bevor dieser ausgefuehrt wird.
>
> Es scheint also so, als ob die Umleitungen von rechts nach links
> erzeugt werden? Wie sollte das dann ueberhaupt irgendwann einmal
> funktionieren?
> Nach meiner Erfahrung fork()t die Shell erst, und macht dann die
> Umleitungen (IIRC). Und wie mein Scheduler jetzt will, darf als erstes
> (Builtin) die Datei oeffnen und lesen, oder eben die zweite Seite der
> Pipe darf als erstes die Datei abschnipseln.
> Dann kann man noch mit Subshells und sleep && rm arbeiten, aber das
> wird dann schon sehr experimentell...

Jetzt muss ich auch mal wieder was dazu sagen ;-)

cat mit nur einer Datei ist ueberfluessig - das kann die Shell
auch mit '<datei'. Und wenn man 'sed -e expression <datei >datei'
ausprobiert, dann ist 'datei' auf jeden fall leer, bevor man
etwas daraus lesen kann.

Wenns denn cat sein muss, koennte man auch mit named pipes arbeiten um
irgenwelche Shell- Eigenheiten zu umgehen:

        mkfifo /tmp/xyzzy$$
        cat datei >/tmp/xyzzy$$&
        # evtl. sleep einfuegen
        sed -e expression </tmp/xyzzy$$ >datei

Und dann austesten, wie gross die Datei maximal sein kann, um
in den Pipe-Buffer zu passen.

-Franz

To Unsubscribe: send mail to majordomo.FreeBSD.org
with "unsubscribe de-bsd-questions" in the body of the message
Received on Wed 07 Jan 2004 - 15:52:08 CET

search this site