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...
- 777 megtekintés
Hozzászólások
UP ? Bocsi, de nagyon kéne :) Olyan nagyon de tényleg. Valaki csak tud valamit ?
- A hozzászóláshoz be kell jelentkezni
--
A gyors gondolat többet ér, mint a gyors mozdulat.
- A hozzászóláshoz be kell jelentkezni