Re: Shell trace

2017-05-08 bef zés PÁSZTOR György
Hi,

"Attila Rajmund Nohl"  írta 2017-05-08 15:26-kor:
> PÁSZTOR György  írta (2017. május 4. 22:58):
> [...]
> > Egy hint, mintának, kiindulási pontnak, ötletekhez:
> > https://github.com/balabit/syslog-ng/blob/master/contrib/syslog-debun
> > Itt keresd a debun_init() fv-t, és próbáld meg az ott felhasznált ötletet
> > lemodellezni. Már ha az is megfelel neked, hogy el kell indíts egy tail -f
> > -et a háttérben, amit a script futása legvégén meg le kell lőjj, ergo a
> > leg-legvége a kimeneteknek nem fog bekerülni a scriptbe, ami a kill-ed után
> > történik. Ha együtt tudsz élni ennyivel.
> > Lelövés: debun_do_tarball().
> > Itt én a végén még a .tgz nevét kiírtam, + ami a .tgz elkészülte után
> > történt, az értelemszerűen már nem került be a tgz-be.
> 
> Ez majdnem jó. Illetve jó, csak azt is szeretném, hogy az stderr is el
> legyen mentve meg ki is írja a képernyőre. Ha azt is átirányítom egy
> trace file-ba és arra is megy egy tail -f, akkor látszik a kimenet,
> csak éppen összekeveredik az stdout-tal (az egyik parancs kimenetébe
> beleíródik a következő hibaüzenete).

Ha alaposan megnézed a scriptet, akkor ez a stderr-t is menti, és kiírja.
Igen, annyiban igazad van, hogy a stdout és stderr összefésülve fog a
fájlban is megjelenni. Viszont úgy elég egy tail is.
Őszintén szólva én pont így szerettem volna, mert így van esélyem meglátni,
hogy mi mi után következett, annak meg nem éreztem jelentőségét, hogy
valami a stderr-en jelent-e meg, vagy a stdin-en.

Üdv,
Gyu
_
linux lista  -  linux@mlf.linux.rulez.org
http://mlf.linux.rulez.org/mailman/listinfo/linux

Re: Shell trace

2017-05-08 bef zés Attila Rajmund Nohl
PÁSZTOR György  írta (2017. május 4. 22:58):
[...]
> Egy hint, mintának, kiindulási pontnak, ötletekhez:
> https://github.com/balabit/syslog-ng/blob/master/contrib/syslog-debun
> Itt keresd a debun_init() fv-t, és próbáld meg az ott felhasznált ötletet
> lemodellezni. Már ha az is megfelel neked, hogy el kell indíts egy tail -f
> -et a háttérben, amit a script futása legvégén meg le kell lőjj, ergo a
> leg-legvége a kimeneteknek nem fog bekerülni a scriptbe, ami a kill-ed után
> történik. Ha együtt tudsz élni ennyivel.
> Lelövés: debun_do_tarball().
> Itt én a végén még a .tgz nevét kiírtam, + ami a .tgz elkészülte után
> történt, az értelemszerűen már nem került be a tgz-be.

Ez majdnem jó. Illetve jó, csak azt is szeretném, hogy az stderr is el
legyen mentve meg ki is írja a képernyőre. Ha azt is átirányítom egy
trace file-ba és arra is megy egy tail -f, akkor látszik a kimenet,
csak éppen összekeveredik az stdout-tal (az egyik parancs kimenetébe
beleíródik a következő hibaüzenete).
_
linux lista  -  linux@mlf.linux.rulez.org
http://mlf.linux.rulez.org/mailman/listinfo/linux

Re: Shell trace

2017-05-08 bef zés Attila Rajmund Nohl
Hegedüs Ervin  írta (2017. május 4. 20:50):
[...]
> nagyon elméleti ötlet van csak: valahogy a "script" parancsot
> elindítani a shell indításakor? Esetleg beállítani shellnek?

Script nem biztos, hogy van installálva, nem építhetek rá.
_
linux lista  -  linux@mlf.linux.rulez.org
http://mlf.linux.rulez.org/mailman/listinfo/linux

Re: Shell trace

2017-05-05 bef zés Ferenc Wágner
Attila Rajmund Nohl  writes:

> Egy shell (elég ha csak bash-ra megy, de ha ksh-ra is működik, még
> jobb) scriptben szeretném logolni, hogy milyen parancsok hajtódnak
> végre milyen kimenettel úgy, hogy közben minden kimenetet a user is
> lásson. Nagyjából a 'set -x' kimenetét szeretném elmenteni. Amit
> próbáltam:
>
> exec &> >(tee $LOGFILE)
> exec 2>$TRACEFILE
>
> Elakad, ha a script meghívja önmagát még akkor is, ha a második
> futásnál a LOGFILE értéke más (gondolom a két tee akad össze). Továbbá
> a hibaüzenetet (ami stderr-re megy) nem látja a user. És nem megy ksh
> alatt sem (valamiért ezt a tee-s subshell-t nem szereti). Ha csak az
> stderr-t irányítom át, akkor működik ksh-val is és az is megy, hogy a
> script meghívja önmagát, de a kimenet ugye nincs meg. Ötlet?

Mit jelent az, hogy "elakad"?  Nekem ez működik (csak megtévesztő, hogy
a prompt visszaadása után is ír még egy kicsit):

#!/bin/bash

logfile="${1:-debug}.log"
exec 3>&2 2> >(tee "$logfile" >&3)

set -ex

echo $USER to stdout
echo $HOME to stderr >&2

[ "$1" = break ] && exit

echo calling myself
./debug break

echo exiting

Külön is logol a break.log fájlba, meg egybe is a debug.logba.  Persze
az stdout és az stderr szinkronja elveszik, mert az utóbbi áthalad a
független tee processzen is.
-- 
Feri
_
linux lista  -  linux@mlf.linux.rulez.org
http://mlf.linux.rulez.org/mailman/listinfo/linux

Re: Shell trace

2017-05-04 bef zés PÁSZTOR György
Hi,

"Attila Rajmund Nohl"  írta 2017-05-04 17:57-kor:
> Egy shell (elég ha csak bash-ra megy, de ha ksh-ra is működik, még
> jobb) scriptben szeretném logolni, hogy milyen parancsok hajtódnak
> végre milyen kimenettel úgy, hogy közben minden kimenetet a user is
> lásson. Nagyjából a 'set -x' kimenetét szeretném elmenteni. Amit
> próbáltam:
> 
> exec &> >(tee $LOGFILE)
> exec 2>$TRACEFILE
> 
> Elakad, ha a script meghívja önmagát még akkor is, ha a második
> futásnál a LOGFILE értéke más (gondolom a két tee akad össze). Továbbá
> a hibaüzenetet (ami stderr-re megy) nem látja a user. És nem megy ksh

Egy hint, mintának, kiindulási pontnak, ötletekhez:
https://github.com/balabit/syslog-ng/blob/master/contrib/syslog-debun
Itt keresd a debun_init() fv-t, és próbáld meg az ott felhasznált ötletet
lemodellezni. Már ha az is megfelel neked, hogy el kell indíts egy tail -f
-et a háttérben, amit a script futása legvégén meg le kell lőjj, ergo a
leg-legvége a kimeneteknek nem fog bekerülni a scriptbe, ami a kill-ed után
történik. Ha együtt tudsz élni ennyivel.
Lelövés: debun_do_tarball().
Itt én a végén még a .tgz nevét kiírtam, + ami a .tgz elkészülte után
történt, az értelemszerűen már nem került be a tgz-be.

Üdv,
Gyu
_
linux lista  -  linux@mlf.linux.rulez.org
http://mlf.linux.rulez.org/mailman/listinfo/linux

Re: Shell trace

2017-05-04 bef zés Hegedüs Ervin
Hello,

On Thu, May 04, 2017 at 05:57:09PM +0200, Attila Rajmund Nohl wrote:
> Hello!
> 
> Egy shell (elég ha csak bash-ra megy, de ha ksh-ra is működik, még
> jobb) scriptben szeretném logolni, hogy milyen parancsok hajtódnak
> végre milyen kimenettel úgy, hogy közben minden kimenetet a user is
> lásson. Nagyjából a 'set -x' kimenetét szeretném elmenteni. Amit
> próbáltam:
> 
> exec &> >(tee $LOGFILE)
> exec 2>$TRACEFILE
> 
> Elakad, ha a script meghívja önmagát még akkor is, ha a második
> futásnál a LOGFILE értéke más (gondolom a két tee akad össze). Továbbá
> a hibaüzenetet (ami stderr-re megy) nem látja a user. És nem megy ksh
> alatt sem (valamiért ezt a tee-s subshell-t nem szereti). Ha csak az
> stderr-t irányítom át, akkor működik ksh-val is és az is megy, hogy a
> script meghívja önmagát, de a kimenet ugye nincs meg. Ötlet?

nagyon elméleti ötlet van csak: valahogy a "script" parancsot
elindítani a shell indításakor? Esetleg beállítani shellnek?


a.


-- 
I � UTF-8
_
linux lista  -  linux@mlf.linux.rulez.org
http://mlf.linux.rulez.org/mailman/listinfo/linux