Attila Rajmund Nohl <attila.r.n...@gmail.com> 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