Как отлаживать скрипт bash?

У меня есть USB-накопитель Huawei E156 HSDPA (3G), и я сделал следующее, также он работал на моем мобильном телефоне Samsung 3g через USB-кабель.

sudo apt-get install wvdial

после установки типа wvdial следующие строки в терминале edit wvdial.conf

sudo gedit /etc/wvdial.conf

Вставьте в свой редактор следующие строки:

[Dialer name]
Modem Type = Analog Modem
Phone = *99#
ISDN = 0
Baud = 460800
Username = " "
Password = " "
Modem = /dev/ttyUSB0
Init1 = ATZ
Init2 = at+cgdcont=1,"ip","your Access Point Name"
Stupid Mode = 1

Всякий раз, когда вам нужно подключиться только к типу в вашем терминале

sudo wvdial name

Теперь вы будете в сети с невероятной скоростью. Я думаю, что этот метод занимает меньше времени и быстрее, чем другие методы.

1
задан 20 June 2016 в 13:17

6 ответов

Есть несколько разных способов, например:

Запустите свой скрипт с опцией -x
bash -x yourscript.sh
Добавьте set -x в новую строку в начале вашего файла сценария после Shebang #!/bin/bash и до начало вашего скрипта, set -v отобразит строки ввода оболочки, set -x отобразит выполненные команды и аргументы заменит shebang вашего файла сценария на #!/bin/bash -xv
20
ответ дан 25 May 2018 в 23:31

shellcheck - лучший в городе -

http://www.shellcheck.net/

вы также можете интегрироваться с vim, вот git repo -

http://www.shellcheck.net/

6
ответ дан 25 May 2018 в 23:31

В настоящее время существует расширение Visual Studio Code Bash Debug. Он имеет «Step in / out / over» и может показывать значение каждой переменной.

Расширение отладки Visual Studio Code Bash

4
ответ дан 25 May 2018 в 23:31

Вы можете использовать эту небольшую функцию для перехода в «консоль»:

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» (как в примере выше) или создать функцию «смотреть»:

function debug_watch
{
    if [[ $1 == $2 ]]; then
        debug
    fi
}

# And Use it:

debug_watch $FILE "strange_case.txt"

Я также добавил команду «vars», которая сбрасывает все доступные переменные и их значения. Вы можете добавить свои собственные настраиваемые команды.

Я сделал код за несколько минут, поэтому используйте его под своим собственным риском. Имейте в виду, что в режиме отладки любая команда может быть выполнена, поэтому она создает угрозу безопасности, если вы оставите ее в рабочем сценарии.

2
ответ дан 25 May 2018 в 23:31
  • 1
    Избегайте использования имен переменных верхнего регистра. Ваш риск переопределяет специальные переменные оболочки и переменные среды. Кроме того, убедитесь, что вы указываете расширения параметров, когда они используются в качестве аргументов, чтобы избежать расщепления слов и расширения пути, возникающих в результате. например * ) eval "$cmd" ;; и debug_watch "$file" strange_case.txt. – geirha 15 May 2015 в 10:44

Параметр GUI для отладки сценария bash - это среда Eclipse с помощью BuggEclipse / Shelled pluggins.

Это дает возможности вашего вопроса (breakpoints and stuff) вместе с множеством других функций для отладки сложные сценарии bash.

Некоторые функции включают в себя: (https://unix.stackexchange.com/questions/155551/how-to-debug-a-bash-script)

[d5 ] Переключатель точки останова. Пошаговое управление. Пошаговые операции, выходы, надстройки и подпрограммы. Изучение переменных кода в любой момент во время выполнения сценария. Список задач TODO. Список закладок. Редактирование нескольких окон. Удаленный доступ к проекту. environment

Перспектива редактора сценариев: https://unix.stackexchange.com/questions/155551/how-to-debug-a-bash-script

Перспектива отладки:

Шаги для использования - это добавить плагины Shelled и BashEclipse для затмения. Затем запустите процедуру, предоставленную в текстовом файле BashEclipse, чтобы начать отладчик.

1
ответ дан 25 May 2018 в 23:31

В соответствии с тем, что говорит 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 Печатает (verbose) строки ввода оболочки по мере их чтения. set -x Печатать команды перед выполнением команды.

set на самом деле имеет много функций, но, к сожалению, нет man-страницы, поскольку это оболочка, встроенная в инструмент.

Существует множество инструментов командной строки, которые могут помочь вам получить подробную информацию о вашей программе, например:

set -f Отключить файл генерация имени с использованием метасимволов. file определяет тип файла. set -v Печатает (verbose) строки ввода оболочки по мере их чтения. nohup Запустите скрипт, который не будет висели и многие другие. Я пытался подумать о команде, которая показывает скрытые символы, но я не могу сделать это прямо сейчас. Hexdump сделает это, но есть лучший.

Ключевая команда ctrl \ приведет к запуску запущенной программы или сценария к дампу ядра. Тогда вы можете проанализировать coredump. Я бы, вероятно, использовал gdb для анализа coredump, но для этого существует множество программ.

В оболочке bash есть несколько отличных вариантов для отладки. опции --debugger, -v verbose, --dump-strings и другие полезные опции, которые помогут вам. Проверьте их, используя man bash.

Команда trap (встроенная оболочка) может быть очень полезной для вас. ловушка говорит, что если ваша программа неожиданно выйдет, выполните что-то. Вы читаете о ловушке, и другие удобные Bash Shell встроили в документацию GNU Bash .

Говоря в целом на данный момент, отладка - это огромная тема на любом языке. Некоторые другие темы, которые могут быть полезны для отладки на любом языке программирования, включают в себя перенаправление оболочки и обработку сигналов.

Наконец, я понимаю, что пример, который я использовал, тривиален, но некоторые сценарии оболочки могут быть сотнями строк , В таких ситуациях мне нравится вставлять теги комментариев и блокировать код, который, как я подозреваю, неисправен, или, альтернативно, вставить команду exit и попытаться изолировать функциональный код от сломанного кода, используя технику разделения и покоя. [!d24 ]

1
ответ дан 25 May 2018 в 23:31

Другие вопросы по тегам:

Похожие вопросы: