Есть ли способ отладки bash-скрипта без использования echo и logging?
Я говорю об использовании точек останова и тому подобного.
Да, есть Bash Debugger Project .
Вы также можете использовать set -x
и set -v
при исполнении. Больше информации:
http://www.linuxtopia.org/online_books/advanced_bash_scripting_guide/debugging.html http://www.cyberciti.biz/tips/debugging-shell-script.html
Удачи!
Есть несколько разных способов, а именно:
Запустите ваш скрипт с опцией -x
bash -x yourscript.sh
Добавление set -x
новой строки в начале вашего файла сценария после Shebang #!/bin/bash
и перед началом вашего сценария, set -v
будет отображать строки ввода оболочки, set -x
отображает выполненные команды и аргументы
замените shebang вашего файла сценария на #!/bin/bash -xv
В настоящее время существует расширение для отладки кода Visual Studio Bash . Он имеет «Step in / out / over» и может показывать значение каждой переменной.
Shellcheck - лучший в городе -
вы также можете интегрироваться с vim, вот git repo -
Вы можете использовать эту маленькую функцию, чтобы попасть в «консоль»:
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", которая выведет все доступные переменные и их значения. Вы также можете добавить свои собственные команды.
Я сделал код за несколько минут, поэтому используйте его на свой страх и риск. Помните, что в режиме отладки может быть выполнена любая команда, поэтому это создает угрозу безопасности, если вы оставите ее в производственном скрипте.
* ) eval "$cmd" ;;
иdebug_watch "$file" strange_case.txt
.В духе того, что говорит NES, в bash установлены флаги, позволяющие отладку.
set -x
Флаг может быть установлен и снят с охраной либо из терминала, или из вашего сценария. Используя+
или-
:Вот что
set
делают команды:set -f
Отключить генерацию имени файла с помощью метасимволов.set -v
Печатает (подробный) строки ввода оболочки, как они читаются.set -x
Напечатайте трассировки команд перед выполнением команды.set
на самом деле имеет много функций, но, к сожалению, нет справочной страницы, так как это встроенный инструмент оболочки. Руководство по настройке находится в документации GNU Bash .Существует множество инструментов командной строки, которые могут помочь вам получить подробную информацию о вашей программе, например:
stat
отображать состояние файла или файловой системыfile
определить тип файла.hexdump
фильтр, который отображает указанные файлы в различных форматахnohup
Запустите скрипт, который не зависнети многие другие. Я пытался думать о команде, которая показывает скрытые символы, но я не могу сделать это прямо сейчас. Hexdump сделает это, но есть лучший.
Команда key ctrl\приведет к тому, что запущенная программа или скрипт выполнит дамп памяти. Тогда вы можете проанализировать coredump. Я бы, вероятно, использовал gdb для анализа coredump, но для этого существует много программ.
В оболочке bash также есть несколько опций для отладки. варианты
--debugger
,-v
подробные--dump-strings
и другие отличные варианты, чтобы помочь вам. Проверьте их, используяman bash
.Команда
trap
(встроенная оболочка) может быть очень полезной для вас. trap говорит, что если ваша программа неожиданно завершает работу, выполните что-то. Вы читаете о ловушке и других полезных встроенных функциях Bash Shell здесь .Говоря в общем на данный момент, отладка - огромная тема на любом языке. Некоторые другие темы, которые могут быть полезны для отладки на любом языке программирования, включают перенаправление оболочки и обработку сигналов.
Наконец, я понимаю, что пример, который я использовал, тривиален, но некоторые сценарии оболочки могут содержать сотни строк. В этих ситуациях мне нравится либо вставлять теги комментариев и блокировать код, который я подозреваю, что он неисправен, либо альтернативно вставлять команду выхода и пытаться изолировать функциональный код от сломанного кода, используя технику «разделяй и властвуй».
источник
Опция GUI для отладки сценария bash - это Eclipse IDE с плагинами BashEclipse / Shelled.
Это дает функции вашего вопроса (
breakpoints and stuff
) вместе с множеством других функций для отладки сложных сценариев bash.Некоторые из функций включают в себя:
( https://unix.stackexchange.com/questions/155551/how-to-debug-a-bash-script )
Перспектива редактора сценариев:
Перспектива отладки:
Шаги для использования, чтобы добавить
Shelled
иBashEclipse
плагины для затмения. Затем запустите процедуру, представленную в текстовом файле read me для BashEclipse, чтобы запустить отладчик.источник