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