Pull to refresh

Comments 6

Подключение как внешней библиотеки делая в начале скрипта source "$DEBUGGER_PATH" поддерживается?

В данной реализации, к сожалению, не поддерживается.

@kt97679 Решил я потестить этот дебаггер на простом скриптике, что живет обычно в /etc/NetworkManager/dispatcher.d и отрабатывает при подъеме интерфейса vpn0 прописывая кастомные маршруты, и наткнулся на странный баг. Вот файлик:

#!/bin/sh

[ "$1" = "vpn0" -a "$2" = "vpn-up" ] || exit 0

for server in de.archive.ubuntu.com us.archive.ubuntu.com; do
    echo "Server: $server"
    for hostip in `host $server|grep 'has address'|cut -d' ' -f4`; do
        echo "  /sbin/route add $hostip dev \"$1\""
        /sbin/route add $hostip dev "$1"
    done
done

Запускаем дебаггер:

user@localhost:~$ bdb.sh /tmp/99-test vpn0 vpn-up
bdb> 

Устанавливаем останов после каждой строчки и начинаем жать Enter шагая по скрипту:

bdb> ba true
bdb> 
+(/tmp/99-test:3): [ "$1" = "vpn0" -a "$2" = "vpn-up" ]
bdb> 
+(/tmp/99-test:5): for server in de.archive.ubuntu.com us.archive.ubuntu.com
bdb> 
+(/tmp/99-test:6): echo "Server: $server"
bdb> 
Server: de.archive.ubuntu.com
bdb> 
bdb> 
bdb> 
+(/tmp/99-test:7): for hostip in `host $server|grep 'has address'|cut -d' ' -f4`
bdb> 

Странно. После строчки выводящей Server: de.archive.ubuntu.com пришлось пару лишних раз нажать Enter - просто выводилась пустая подсказка. Ну да ладно, шагаем дальше.

bdb> 
+(/tmp/99-test:8): echo "  /sbin/route add $hostip dev \"$1\""
bdb> 
  /sbin/route add +(/tmp/99-test:7): dev "vpn0"
+(/tmp/99-test:9): /sbin/route add $hostip dev "$1"
bdb> 

Стоп! Эээ... что это вывела команда echo вместо переменной $hostip??? Давайте-ка проверим, что там в $hostip

bdb> echo $hostip
+(/tmp/99-test:7):
bdb> 

Так и есть, там хрень какая-то похожая на служебную строчку дебаггера с именем скрипта и номером строки. Может наш конвеер host|grep|cut криво работает под дебаггером?

bdb> host $server|grep 'has address'|cut -d' ' -f4
141.30.62.24
141.30.62.25
141.30.62.22
141.30.62.23
141.30.62.26
bdb> 

Нет, отлично работает. Но вот в переменной цикла for $hostip какая-то фигня вместо IP-адресов.

Воу, это отличный баг, спасибо, что поймали! Дело в том, что когда мы присваиваем вывод команды переменной, то туда идет все содержимое stdout, в том числе то, что туда выводит отладчик. Исправлено. Посмотрите, пожалуйста, как работает исправленный вариант?

Да, сейчас нормально проходит. Спасибо!

Sign up to leave a comment.

Articles