Что такое include /bin/crab_sys.sh
crab_sys.sh - это унификация удобных функций для ускорения разработки на bash.
Способ распространения и место расположения не регламентировано, рекомендуется тем же способом, что и сам скрипт.
0. Включает set -euEo pipefail
1. SIC! Отлавливает ошибки и показывает номер строки и контекст с ошибкой, что ускоряет отладку в разы
2. Автоматически пишет START SUCCESS FAIL для соблюдения stronbash, можно отключить
__SILENT=TRUE
3. Содержит встроенный sys::usage
Пример использования:
#!/bin/bash set -eu . /opt/crab/crab_utils/bin/crab_sys.sh sys::usage "$@" ### --help утилита поиска примеров http://www.opencarbon.ru и можно свои добавлять списки ### --help Usage: ### --help crab_example sed - примеры sed ### --help crab_example bash string - примеры bash подпримеры работы со строками ### --help crab_example update - обновить кеш всех списков echo TODO exit 0
### version 30.03.2017 set -euEo pipefail __ARGV= # revers argv for __ARG in ${BASH_ARGV[@]:1}; do __ARGV="$__ARG $__ARGV" done __BASH_SOURCE=${BASH_SOURCE[1]} [ "${__SILENT:-}" = "" ] && echo "START ${__BASH_SOURCE} $__ARGV" >&2 trap '__exit $? CMD=${BASH_COMMAND// /%%%%%} $@' ERR __exit(){ set +eu local STATUS=$1 local CMD= local ARGV= shift if [[ "${1}" == "CMD="* ]]; then CMD=${1//CMD=/} CMD=${CMD//%%%%%/ } shift ARGV="$@" else echo "" echo "__exit $STATUS $@" CMD="__exit" ARGV= fi echo "" echo "ERROR_PROG=$__BASH_SOURCE $__ARGV ERROR_STACK=${BASH_SOURCE[@]:1}" echo "ERROR_SOURCE=${BASH_SOURCE[@]:1:1} $ARGV ERROR_CMD=\"${CMD}\" ERROR_STATUS=$STATUS LINENO=${BASH_LINENO[@]:0:${#BASH_LINENO[@]}-1} FUNC: ${FUNCNAME[@]:1}" echo "" #echo grep -n "${CMD}" ${BASH_SOURCE[@]:1:1} -B 5 -A 5 grep "^${BASH_LINENO[@]:0:1}:" -B 5 -A 5 #grep -n "${CMD}" ${BASH_SOURCE[@]:1:1} -B 5 -A 5 | grep "^${BASH_LINENO[@]:0:1}:" -B 5 -A 5 grep -n . "${BASH_SOURCE[@]:1:1}" -B 5 -A 5 | grep "^${BASH_LINENO[@]:0:1}:" -B 5 -A 5 --color exit ${STATUS:-0} } trap '__trapexit $?' EXIT __trapexit(){ set +eu if [ $1 = 0 ]; then [ "${__SILENT:-}" = "" ] && echo "SUCCESS ${__BASH_SOURCE} $__ARGV" >&2 else echo "FAILED ${__BASH_SOURCE} $__ARGV" >&2 fi exit $1 } sys::usage(){ [ "${1:---help}" != "--help" ] && return 0 ( set +e echo grep -H '# [-][-]help' ${__BASH_SOURCE} | sed -n 's/^.*[/]\(.*\)[ ]*[ #]*--help[ ]*\(.*\)/\1 \2/p' exit 0 ) [ "${1:-}" = "--help" ] && exit 0 || exit 255 }
~~OWNERAPPROVE~~
Обсуждение
Не хватает рекомендаций к использованию. Где использовать (для всех новых скриптов/для ручных скриптов/для демонов), обязательно везде/по желанию.
Не хватает примеров вывода ошибок. Возможно, стоит пару слов написать про нюансы работы с pipefail
Всем пока рано в обязаловку, как минимум, в настойчивую рекомендацию.(и в обязаловку Коля Олег и Сергей1 имхо) В обязаловку всем остальным crab_syntax.
pipefail - важен для
Чтобы не терять ошибки первой скобки. Если это мешает сложным грепам то делаем так
Второй блок это сам файл?
Последняя версия всегда в crab_utils
прочитал
Насчёт crab_utils, кстати, у нас есть где-нибудь пример их установки в наши контейнеры?
есть у Коли1 это ставится оркестровкой или как то так, после рефакторинга carbon vps займемся и везде поставим, и агента мониторинга поставим.
Мониторинг кстати запущен, можно юзать.