Bash debug

Pavel Kankovsky peak na argo.troja.mff.cuni.cz
Sobota Listopad 21 02:13:48 CET 2015


On Fri, 20 Nov 2015, Petr Klíma wrote:

> 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

To není úplně dobrý nápad. V $BASH_COMMAND může být něco, co má vedlejší 
efekty (např. $(...)) a takto se to vykoná už během výpisu.

> Moje představa je aby to expandovanou (to co bude opravdu spouštět) variantu 
> *exe* zobrazovalo takto: [...]
>
> [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

Něco takového umí "set -x", ale ten nejde moc dobře kombinovat s trap 
DEBUG, protože to pak interaguje dost nežádoucím způsobem. Pokud by 
stačilo jen trasování a ne krokování, tak by možná šlo něčeho podobného 
specifikovanému výsledku dosáhnout pomocí PS4, např. něčím jako

   PS4='+ [$BASH_SOURCE:$LINENO]\nsrc> $BASH_COMMAND\nexe> '
   set -x

-- 
Pavel Kankovsky aka Peak                      "Que sais-je?"


Další informace o konferenci Linux