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

válasz