Bash debug
Petr Klíma
qaxi na seznam.cz
Pátek Listopad 20 13:21:28 CET 2015
Dobrý den,
snažím se si vylepšit debugování v BASH.
Používám toto na krokování.
set -T ; trap '(read -p "$(p="[$(basename $BASH_SOURCE):$LINENO]"; echo -e "$p src> $BASH_COMMAND\n$p exe> $(eval "echo" $BASH_COMMAND) #?")" )' DEBUG # debug stepping
Výstup je např. takovýto:
[bashdebug.test.sh:5] src> OPT1="Dvě slova"
[bashdebug.test.sh:5] exe> OPT1=Dvě slova #?
[bashdebug.test.sh:6] src> OPT2="Tři slova"
[bashdebug.test.sh:6] exe> OPT2=Tři slova #?
[bashdebug.test.sh:8] src> VAR1="$OPT1 + $OPT2"
[bashdebug.test.sh:8] exe> VAR1=Dvě slova + Tři slova #?
[bashdebug.test.sh:10] src> echo "$VAR1"
[bashdebug.test.sh:10] exe> echo Dvě slova + Tři slova #?
Dvě slova + Tři slova
[bashdebug.test.sh:11] src> echo "$OPT1" "+" $OPT2
[bashdebug.test.sh:11] exe> echo Dvě slova + Tři slova #?
Dvě slova + Tři slova
Moje představa je aby to expandovanou (to co bude opravdu spouštět)
variantu *exe* zobrazovalo takto:
[bashdebug.test.sh:5] src> OPT1="Dvě slova"
[bashdebug.test.sh:5] exe> OPT1='Dvě slova' #?
... žádná expanze - čistý string
[bashdebug.test.sh:8] src> VAR1="$OPT1 + $OPT2"
[bashdebug.test.sh:8] exe> VAR1='Dvě slova + Tři slova' #?
... provedená expanze - čistý string
[bashdebug.test.sh:10] src> echo "$VAR1"
[bashdebug.test.sh:10] exe> echo 'Dvě slova + Tři slova' #?
Dvě slova + Tři slova
... provedená expanze - command echo s jedním parametrem
[bashdebug.test.sh:11] src> echo "$OPT1" "+" "$OPT2"
[bashdebug.test.sh:11] exe> echo 'Dvě slova' '+' 'Tři slova' #?
Dvě slova + Tři slova
... provedená expanze - command echo se třemi parametry
[bashdebug.test.sh:11] src> echo $OPT1 "+" $OPT2
[bashdebug.test.sh:11] exe> echo 'Dvě' 'slova' '+' 'Tři' 'slova' #?
Dvě slova + Tři slova
... provedená expanze - command echo s pěti parametry
Je nějaký způsob jak bashem získat z proměnné $BASH_COMMAND expandovaný
oquotovaný command ?
Díky
--
Petr Klíma
<qaxi na seznam.cz>
Další informace o konferenci Linux