/ / Как правилно да отстранявам грешки в bash скрипта - linux, bash, debugging

Как правилно да отстраните бадж скрипт - linux, bash, debugging

Използвам следния код в 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, Това е наистина добър инструмент за отстраняване на грешки в скриптовете на обвивката.