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