Есть ли способ отладки bash-скрипта без использования echo и logging?
Я говорю об использовании точек останова и подобных вещей.
Да, есть Проект Bash Debugger .
Вы также можете использовать set -x
и set-v
при исполнении. ЗДЕСЬ и ЗДЕСЬ или ЗДЕСЬ - некоторая информация об этом.
удачи!
shellcheck является лучшим в городе -
вы также можете интегрировать с vim, вот git repo -
В настоящее время существует расширение отладки кода Visual Studio Bash . Он имеет «Step in / out / over» и может показывать значение каждой переменной.
Вы можете использовать эту маленькую функцию для перехода в «консоль»:
function debug
{
echo "#############| Entering DEBUG mode |####################";
CMD=""
while [[ $CMD != "exit" ]]; do
read -p "> " CMD
case $CMD in
vars ) ( set -o posix ; set );;
exit ) ;;
* ) eval $CMD;;
esac
done
echo "#############| End of DEBUG mode |####################";
}
Затем, внутри вашего скрипта (ПРИМЕР):
for FILE in *; do
...
if [[ $FILE == "strange_case.txt" ]]; then
# break the code here to analyze:
debug
fi
...
done
Он примет любую команду, сохраняя локальные переменные не повреждены. Чтобы выйти из режима «отладки», введите «exit» (он не выйдет из сценария), и он продолжит работу с кодом. Если вы используете «debug» внутри цикла, он будет останавливаться каждый раз. Вы можете заключить его в «if» (как в примере выше) или создать функцию «watch»:
function debug_watch
{
if [[ $1 == $2 ]]; then
debug
fi
}
# And Use it:
debug_watch $FILE "strange_case.txt"
Я также добавил команду «vars», которая выведет все доступные переменные и их ценности. Вы также можете добавить свои собственные команды.
Я сделал код за несколько минут, поэтому пользуйтесь им на свой страх и риск. Имейте в виду, что в режиме отладки может быть выполнена любая команда, поэтому она представляет угрозу безопасности, если вы оставите ее в производственном скрипте.
Опцией GUI для отладки сценария удара является Eclipse IDE с BashEclipse/Shelled pluggins.
Это дает функции Вашего вопроса (breakpoints and stuff
) наряду с хостом других функций отладки комплекса колотят сценарии.
Некоторые функции включают:
(https://unix.stackexchange.com/questions/155551/how-to-debug-a-bash-script)
Перспектива Редактора сценариев:
Шаги для использования должны добавить Shelled
и BashEclipse
плагины для затмения. Затем работайте, процедура, предоставленная в BashEclipse, считала меня текстовый файл для запуска отладчика.
Там несколько различных путей, т.е.:
Запустите свой скрипт с-x опцией
bash -x yourscript.sh
Добавить set -x
в новой строке в начале Вашего scriptfile после Хижины #!/bin/bash
и перед началом Вашего сценария, set -v
отобразил бы входные строки оболочки, set -x
отображает выполняемые команды и аргументы
замените хижину своего файла сценария с #!/bin/bash -xv
В соответствии с тем, что говорит NES, в bash установлены флаги для отладки.
Флаг set -x
может быть установлен и снят либо с терминала, либо из вашего скрипта. Использование +
или -
:
#!/bin/bash
#fileinfo
ls -l $1
set -x # start debugging here
wc -l $1
set +x # stop debugging here
file $1
set -v # start verbose output
w | more
echo ""
echo -n "Number of users: "
set +v # end verbose output
who | wc -l
Вот что делают команды set
:
set -f
Отключение генерации имени файла с использованием метасимволов. set -v
Печатает (подробные) строки ввода оболочки в том виде, в каком они были прочитаны. set -x
Печать следов команд перед выполнением команды. set
на самом деле имеет много функций, но, к сожалению, не имеет справочной страницы, так как это встроенный инструмент оболочки. Руководство по настройке находится в документации GNU Bash .
Существует множество инструментов командной строки, которые могут помочь вам получить подробную информацию о вашей программе, например:
stat
отображать состояние файла или файловой системы file
определять файл типа. hexdump
фильтр, который отображает указанные файлы в различных форматах nohup
Запустите скрипт, который не будет зависать
и многие другие. Я пытался придумать команду, которая показывает скрытые символы, но я не могу сделать это прямо сейчас. Hexdump сделает это, но есть лучший.
Команда ключа ctrl kbd> \ kbd> вызовет запуск программы или сценария для дампа ядра. Тогда вы можете проанализировать coredump. Я бы, вероятно, использовал gdb для анализа coredump, но для этого существует много программ.
В оболочке bash также есть несколько отличных опций для отладки. варианты --debugger
, -v
подробный, --dump-strings
и другие отличные варианты, чтобы помочь вам. Проверьте их, используя man bash
.
Команда trap
(встроенная оболочка) может быть очень полезна для вас. trap говорит, что если ваша программа неожиданно завершает работу, выполните что-то. Вы читаете о trap и других удобных встроенных функциях Bash Shell здесь .
Говоря в общем на данный момент, отладка - огромная тема на любом языке. Некоторые другие темы, которые могут быть полезны для отладки на любом языке программирования, включают перенаправление оболочки и обработку сигналов.
Наконец, я понимаю, что пример, который я использовал, тривиален, но некоторые сценарии оболочки могут содержать сотни строк. В этих ситуациях мне нравится либо вставлять теги комментариев и блокировать код, который я подозреваю, что он неисправен, либо альтернативно вставлять команду выхода и пытаться изолировать функциональный код от неработающего кода, используя технику «разделяй и властвуй».