Използвам следния код в bash скрипт, за да проследя кода
#!/bin/bash
function trace()
{
echo "TRACE"
"${BASH_SOURCE[1]}:${BASH_LINENO[0]}:${FUNCNAME[1]}:"
"$BASH_COMMAND"
}
set -o functrace
shopt -s extdebug
trap trace DEBUG
# Remainder of code here
exit 0
Но когато я стартирам, той изяжда променливите ми. Някаква улика?
Отговори:
4 за отговор № 1Най-добрият начин е да използвате set -xv
, Най- set -v
ще повтори ред преди да бъде изпълнен. Най- set -x
ще изведе реда, след като скриптът интерполира променливите и изразите в този ред.
Като част от това можете да създадете и променлива на обкръжение, наречена PS4
което ще бъде отпечатано всеки път, когато вашите скриптове извеждат линията, която се изпълнява. Повечето хора го поставят на нещо подобно PS="$LINENO: "
който ще отпечата номера на реда за изпълняваната линия.
След като приключите, можете да изключите отстраняването на грешки чрез настройка set +xv
.
#
# Somewhere in this part of my script, I am having problems....
#
export PS4="$LINENO> " # Now, I"ll see the line numbers while debugging
set -xv # Debugging is turned on
....
#
# Done with debugging
#
set +xv # Debugging is turned off
4 за отговор № 2
Ето няколко препоръки:
- Винаги можете да излъчвате линия в скрипта, за да видите какво се случва.
- Можете също така да използвате
set -xv
за да ви помогне да отстраните грешки в скрипта. Просто казаноset -xv
преди частта, която искате да отстраните грешки, иset +xv
, за да изключите отстраняването на грешки. Можете също да използватеexport PS4="$LINENO> "
за да отпечатате номера на реда в скрипта.
Ето как ще изглежда скриптът ви с set -xv
, Това е наистина добър инструмент за отстраняване на грешки в скриптовете на обвивката.