Ответы:
Да, есть 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", которая выведет все доступные переменные и их значения. Вы также можете добавить свои собственные команды.
Я сделал код за несколько минут, поэтому используйте его на свой страх и риск. Помните, что в режиме отладки может быть выполнена любая команда, поэтому это создает угрозу безопасности, если вы оставите ее в производственном скрипте.
В духе того, что говорит 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 сделает это, но есть лучший.
Команда 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, чтобы запустить отладчик.
* ) eval "$cmd" ;;иdebug_watch "$file" strange_case.txt.