====== Что такое 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 } {{tag>}} ~~DISCUSSION~~ ~~OWNERAPPROVE~~