pipe buffer ?

Sziasztok,
írtam egy kis shell scriptete, ami bekapcsolja set -x -el a shell "debug"-ot, majd fork-ol egy process-t ami kiválogatja a -x kimenetét az STDERR-ről és egy fáljba teszi...

A kód:

debug.sh

#!/bin/bash

function debug_on()
{
mkfifo _in.$$
sepa _in.$$ $1 &
DEBUGGER_PID=$!
exec 3>&2
exec 2>_in.$$
set -x
}

function debug_off()
{
## SET OFF
set +x
exec 2>&3
exec 3>&-
rm _in.$$
wait $DEBUGGER_PID
}

### SET ON
function sepa()
{
echo " ======= `date` ======= " >> $2
while [ -e $1 ] ; do
line=`cat $1 2>/dev/null`
echo "$line" | grep -v '^+' >&2
echo "$line" | grep '^+' >> $2
done
}

és a teszt script amiből ezt meghívom:

#!/bin/bash

source debug.sh

debug_on 'test.log'

for i in `seq 1 10` ; do
echo "out $i"
echo "err $i">&2
done

debug_off

Na már most a gondom a következő:

output:

out 1
out 2
out 3
out 4
out 5
out 6
out 7
out 8
out 9
out 10
err 1
err 2
err 3
err 4
err 5
err 6
err 7
err 8
err 9
err 10

Tehát úgy fest, hogy a pipe, valahogy bufferelt, és nem kerül bele az adat adott idő előtt... A lehető legjobb megoldás az lenne, ha:

a, a set -x tud fáljba írni, csak én nem találtam sehol
b, a kimenete úgy nézne ki: out1 err1 out2 ....

Előre is köszönöm, ha megtetszett a kód és még ki is javítjuk, akkor feel free to use :)

Amit már probáltam, egy jó kis sleep a ciklusba a teszt programba, sajna nem segít, tehát nem az történik, hogy a forkolt processz nem kap időt... meg hát úgy lenne az igazi, ha a teszelt kódba csak a debug_on és debug off kerülne, késöbb úgy tervezem módosítani, hogy csak akkor debug-oljon ha egy rendszer változót beállítok...

Hozzászólások

UP ? Bocsi, de nagyon kéne :) Olyan nagyon de tényleg. Valaki csak tud valamit ?