Что такое 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~~

Nikolay CarbonsoftNikolay Carbonsoft, 19.04.2017 06:27

Не хватает рекомендаций к использованию. Где использовать (для всех новых скриптов/для ручных скриптов/для демонов), обязательно везде/по желанию.

Не хватает примеров вывода ошибок. Возможно, стоит пару слов написать про нюансы работы с pipefail

Sergey OsintsevSergey Osintsev, 20.04.2017 06:20 (20.04.2017 06:20)

Всем пока рано в обязаловку, как минимум, в настойчивую рекомендацию.(и в обязаловку Коля Олег и Сергей1 имхо) В обязаловку всем остальным crab_syntax.

pipefail - важен для

(a;b;) | (c;d)

Чтобы не терять ошибки первой скобки. Если это мешает сложным грепам то делаем так

cat t| grep -v q | grep -v g || true
Anton KlinskihAnton Klinskih, 20.04.2017 02:39

Второй блок это сам файл?

Sergey OsintsevSergey Osintsev, 20.04.2017 06:15

Последняя версия всегда в crab_utils

adminadmin, 04.09.2018 09:50

прочитал

Олег СтрижеченкоОлег Стрижеченко, 02.10.2018 05:04

Насчёт crab_utils, кстати, у нас есть где-нибудь пример их установки в наши контейнеры?

adminadmin, 08.10.2018 05:59 (08.10.2018 06:00)

есть у Коли1 это ставится оркестровкой или как то так, после рефакторинга carbon vps займемся и везде поставим, и агента мониторинга поставим.

Мониторинг кстати запущен, можно юзать.

Ваш комментарий. Вики-синтаксис разрешён: