Відповіді:
Так, є проект налагодження Bash .
Ви також можете використовувати 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
відображаються виконані команди та аргументи
замініть шебанг файлу сценарію #!/bin/bash -xv
На сьогоднішній день існує розширення Visual Studio Code Bash Debug . Він має "Крок / вихід / перехід" і може показувати значення кожної змінної.
шелчек - найкращий у місті -
Ви також можете інтегруватися з 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" (сценарій не вийде), і він продовжить код. Якщо ви використовуєте "налагодження" всередині циклу, він щоразу зупинятиметься. Ви можете загорнути його всередину "if" (як у прикладі вище) або створити функцію "watch":
function debug_watch
{
if [[ $1 == $2 ]]; then
debug
fi
}
# And Use it:
debug_watch "$file" "strange_case.txt"
Я також додав команду "vars", яка скидає всі доступні змінні та їх значення. Ви також можете додати власні спеціалізовані команди.
Я зробив код за кілька хвилин, тому використовуйте його на свій страх і ризик. Майте на увазі, що в режимі налагодження може виконуватися будь-яка команда, тому вона створює ризик для безпеки, якщо залишити її у виробничому сценарії.
На думку того, що говорить NES, у баші встановлені прапори, щоб дозволити налагодження.
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\призведе до запуску програми або сценарію до дампу core. Тоді ви могли проаналізувати coredump. Я б, мабуть, використовував gdb для аналізу coredump, але для цього існує багато програм.
Оболонка bash також має кілька чудових варіантів налагодження. варіанти --debugger
, -v
багатослівні --dump-strings
та інші чудові варіанти, які допоможуть вам. Перевірте їх, використовуючи man bash
.
trap
Команди (оболонки вбудованих) можуть бути дуже корисними для вас. trap каже, що якщо ваша програма несподівано виходить, виконайте щось. Ви читаєте про пастку та інші зручні вбудовані Bash Shell тут .
Якщо говорити загалом на даний момент, налагодження - це величезна тема будь-якої мови. Деякі інші теми, які можуть бути зручні для налагодження на будь-якій мові програмування, включають перенаправлення оболонки та обробку сигналів.
Нарешті, я усвідомлюю, що приклад, який я використав, є тривіальним, але деякі сценарії оболонок можуть бути сотнями рядків. У таких ситуаціях мені подобається або вставляти теги коментарів і блокувати код, який я підозрюю, що він несправний, або, як варіант, вставити команду виходу та спробувати ізолювати функціональний код від зламаного коду, використовуючи техніку ділення та підкорити.
Параметр GUI для налагодження сценарію bash - це IDE Eclipse з плагінами BashEclipse / Sheched.
Це дає особливості вашого запитання (breakpoints and stuff
) разом з низкою інших функцій для налагодження складних скриптів bash.
Деякі функції включають:
( https://unix.stackexchange.com/questions/155551/how-to-debug-a-bash-script )
Перспектива редактора сценаріїв:
Етапи використання - додавання модулів Shelled
та BashEclipse
плагінів до затемнення. Потім запустіть процедуру, надану в текстовому файлі BashEclipse прочитати мене, щоб запустити налагоджувач.
* ) eval "$cmd" ;;
іdebug_watch "$file" strange_case.txt
.