Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Программирование в *nix (http://forum.oszone.net/forumdisplay.php?f=35)
-   -   [решено] bash debugging отладка скриптов (ликбез) (http://forum.oszone.net/showthread.php?t=343738)

lxa85 20-01-2020 15:47 2905910

bash debugging отладка скриптов (ликбез)
 
Здравствуйте.
Подошел в работе плотно к вопросам автоматизированной сборки приложений.
Пока не то, чтобы у нас был красивый CI/CD с кучей плюшек - пока bash наследие которое при правильном сложении звезд, дает приемлемый результат.
Но это лирика. Вопрос в другом.
В bash скрипте (Jenkins) есть строка

set +x
Документация говорит, что корректнее писать
set -x
Далее открывается новое для меня понятие PS4, которых оказывается 5(!) PS1, PS2, PS3, PS4 and PROMPT_COMMAND
+ set -o xtrace
Вопрос больше ликбез - о том, как использовать bash и его "мощь" правильно, чтобы красиво и удобно.
Т.к. сейчас это дебаг - принтами и довольно примитивная культура множественного перезапуска с исправлением одной, двух строк.
Должны же люди были придумать что удобное.

Какой бы вы документ предложили с внятным изложением этих процессов?
Где научиться правильно использовать PS1 - PS4 уровни ?
Как "правильно" вести отладку, и какие есть инструменты помощи программисту?

greg zakharov 20-01-2020 17:56 2905939

Не следует путать "уровень" и "переменную окружения". PROMPT_COMMAND, ровно как и PS0-PS4 - переменные окружения оболочки bash, хотя они и не устанавливаются автоматически все же во многом влияют на ход работы последней. Если объяснять на пальцах, то по принципу "переменная=<принимаемое_значение>".

PROMPT_COMMAND=команда
Если эта переменная установлена, bash выполняет указанную команду всякий раз, прежде чем выводить основное приглашение.

PS0=строка
Символьная строка, выводимая интерактивными оболочками после чтения команды (но перед ее выполнением).

PS1=строка
Основная строка приглашения (по умолчанию '\s-\v\$ ').

PS2=строка
Вспомогательное приглашение, применяемое в многострочных командах (по умолчанию '>').

PS3=строка
Строка приглашения в select (по умолчанию '#?').

PS4=строка
Строка приглашения к трассировке выполняемых команд (при bash -x или set -x). Следует иметь в виду, что оболочки запущенные с правами root, не наследуют эту переменную из рабочей среды. (Значение по умолчанию '+').

Теперь о set -x. Во-первых, set -o xtrace и set -x - равнозначны и активируют режим отображения команды вместе с ее аргументами во время ее выполнения, предваряя ее значением переменной PS4. Этим, собственно, обеспечивается пошаговая трассировка сценариев в bash. Во-вторых, отладка командных сценариев - понятие абстрактное, ровно настолько, что у каждого найдутся свои контраргументы что есть "тру", а что "бэд". Словом, здесь кроме чтения встроенных манов и холостыми экспериментами сути в полной мере не передать.


Время: 09:48.

Время: 09:48.
© OSzone.net 2001-