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