simplified
This commit is contained in:
@@ -1,8 +1,8 @@
|
|||||||
MIAOU-BASH
|
MIAOU-BASH
|
||||||
===========
|
===========
|
||||||
|
|
||||||
MIAOU-BASH is a collection of settings and helpers for leveraging BASH.
|
MIAOU-BASH is a collection of settings and helpers aiming for leveraging BASH.
|
||||||
Developer-friendly, it may be used as solo package with or without the miaou project.
|
Developer-friendly, it may be used as a solo package or combined with other miaou-* utilities.
|
||||||
|
|
||||||
## Featuring
|
## Featuring
|
||||||
|
|
||||||
@@ -16,19 +16,22 @@ It's Free Software (AGPLv3), help yourself.
|
|||||||
Any feedback would be appreciated. [contact@artcode.re](mailto:contact@artcode.re)
|
Any feedback would be appreciated. [contact@artcode.re](mailto:contact@artcode.re)
|
||||||
|
|
||||||
## install
|
## install
|
||||||
|
|
||||||
`curl https://git.artcode.re/miaou/miaou-bash/raw/branch/main/install.sh | sudo bash -s`
|
`curl https://git.artcode.re/miaou/miaou-bash/raw/branch/main/install.sh | sudo bash -s`
|
||||||
|
|
||||||
## upgrade
|
## upgrade
|
||||||
|
|
||||||
`upgrade-miaou-bash`
|
`upgrade-miaou-bash`
|
||||||
|
|
||||||
## uninstall
|
## uninstall
|
||||||
|
|
||||||
`cd /opt/miaou-bash && sudo ./uninstall.sh`
|
`cd /opt/miaou-bash && sudo ./uninstall.sh`
|
||||||
|
|
||||||
## development mode (credentials required)
|
## development mode (credentials required)
|
||||||
|
|
||||||
* REAL_DIR=/opt/miaou-bash
|
* REAL_DIR=/opt/miaou-bash
|
||||||
* sudo mkdir -m 755 $REAL_DIR && sudo chown $(id -un) $REAL_DIR
|
* sudo mkdir -m 755 $REAL_DIR && sudo chown $(id -un) $REAL_DIR
|
||||||
* git clone git@artcode.re:miaou/miaou-bash.git $REAL_DIR
|
* git clone <git@artcode.re>:miaou/miaou-bash.git $REAL_DIR
|
||||||
* DEV_DIR=$HOME/DEV/BASH/miaou-bash # change DEST according to your needs!
|
* DEV_DIR=$HOME/DEV/BASH/miaou-bash # change DEST according to your needs!
|
||||||
* ln -s $REAL_DIR $DEV_DIR
|
* ln -s $REAL_DIR $DEV_DIR
|
||||||
* cd $REAL_DIR && sudo ./install.sh
|
* cd $REAL_DIR && sudo ./install.sh
|
||||||
|
|||||||
+22
-21
@@ -2,15 +2,16 @@
|
|||||||
|
|
||||||
# CONSTANTS
|
# CONSTANTS
|
||||||
|
|
||||||
BASH_BACK_ERROR=$(mktemp -t "$(basename "$0").XXXXXXXX" --tmpdir="/run/user/$(id -u)")
|
MIAOU_BASH_ERROR=$(mktemp -t "$(basename "$0").XXXXXXXX" --tmpdir="/run/user/$(id -u)")
|
||||||
BASH_BACK_DEBUG=${BASH_BACK_DEBUG:-false}
|
MIAOU_BASH_DEBUG=${MIAOU_BASH_DEBUG:-false}
|
||||||
readonly BASH_BACK_ERROR BASH_BACK_DEBUG
|
readonly MIAOU_BASH_ERROR MIAOU_BASH_DEBUG
|
||||||
|
|
||||||
# FUNCTIONS
|
# FUNCTIONS
|
||||||
|
|
||||||
function on_return {
|
function on_return {
|
||||||
|
# regex does not work here unfortunately!
|
||||||
if [[ "${BASH_COMMAND}" == 'return '* ]]; then
|
if [[ "${BASH_COMMAND}" == 'return '* ]]; then
|
||||||
code=$(echo "${BASH_COMMAND}" | cut -d' ' -f2) # regex does not work here unfortunately!
|
code=$(echo "${BASH_COMMAND}" | cut -d' ' -f2)
|
||||||
if [[ -n "$code" ]] && [[ "$code" -ne 0 ]]; then
|
if [[ -n "$code" ]] && [[ "$code" -ne 0 ]]; then
|
||||||
trap - DEBUG
|
trap - DEBUG
|
||||||
>&2 echo "${BASH_SOURCE[2]}: line ${BASH_LINENO[0]}: return $code from ${FUNCNAME[1]}"
|
>&2 echo "${BASH_SOURCE[2]}: line ${BASH_LINENO[0]}: return $code from ${FUNCNAME[1]}"
|
||||||
@@ -55,7 +56,7 @@ function on_exit {
|
|||||||
stack_summary=()
|
stack_summary=()
|
||||||
|
|
||||||
if [[ $code -gt 0 ]]; then
|
if [[ $code -gt 0 ]]; then
|
||||||
last_error=$(tail -n1 "$BASH_BACK_ERROR")
|
last_error=$(tail -n1 "$MIAOU_BASH_ERROR")
|
||||||
last_source=${stack_sources[0]}
|
last_source=${stack_sources[0]}
|
||||||
last_source=${last_source//./"\."} # replace '.' with '\.'
|
last_source=${last_source//./"\."} # replace '.' with '\.'
|
||||||
regex1="^$last_source: line ([0-9]+): (.*)\$"
|
regex1="^$last_source: line ([0-9]+): (.*)\$"
|
||||||
@@ -87,44 +88,44 @@ function on_exit {
|
|||||||
stack_detail=$(printf "\t%30s\t%s\n" "${stack_sources[$i]}:${stack_lines[$i]}" "${stack_functions[$i]}")
|
stack_detail=$(printf "\t%30s\t%s\n" "${stack_sources[$i]}:${stack_lines[$i]}" "${stack_functions[$i]}")
|
||||||
stack_summary+=("$stack_detail")
|
stack_summary+=("$stack_detail")
|
||||||
done
|
done
|
||||||
>&4 dump_stderr true
|
dump_failure
|
||||||
dump_summary
|
|
||||||
else
|
else
|
||||||
>&4 dump_stderr false
|
dump_success
|
||||||
fi
|
fi
|
||||||
|
|
||||||
cleanup
|
|
||||||
builtin exit "$code"
|
builtin exit "$code"
|
||||||
}
|
}
|
||||||
|
|
||||||
function dump_summary {
|
function dump_failure {
|
||||||
$BASH_BACK_DEBUG && >/dev/tty echo '---stacktrace---'
|
dump_stderr true
|
||||||
|
$MIAOU_BASH_DEBUG && >/dev/tty echo '---stacktrace---'
|
||||||
for i in "${stack_summary[@]}"; do
|
for i in "${stack_summary[@]}"; do
|
||||||
>&4 echo -e "$i"
|
>&4 echo -e "$i"
|
||||||
done
|
done
|
||||||
|
cleanup
|
||||||
}
|
}
|
||||||
|
|
||||||
function dump_stderr {
|
function dump_stderr {
|
||||||
last_trim=${1:-false}
|
last_trim=${1:-false}
|
||||||
mapfile -t tmp_error <"$BASH_BACK_ERROR"
|
mapfile -t tmp_error <"$MIAOU_BASH_ERROR"
|
||||||
$last_trim && unset 'tmp_error[-1]' && tmp_error=("${tmp_error[@]}")
|
$last_trim && unset 'tmp_error[-1]' && tmp_error=("${tmp_error[@]}")
|
||||||
if [[ "${#tmp_error[@]}" -gt 0 ]]; then
|
if [[ "${#tmp_error[@]}" -gt 0 ]]; then
|
||||||
$BASH_BACK_DEBUG && >/dev/tty echo '---stderr---'
|
$MIAOU_BASH_DEBUG && >/dev/tty echo '---stderr---'
|
||||||
for i in "${tmp_error[@]}"; do
|
for i in "${tmp_error[@]}"; do
|
||||||
echo -e "$i"
|
>&4 echo -e "$i"
|
||||||
done
|
done
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
function success {
|
function dump_success {
|
||||||
>&2 dump_stderr
|
dump_stderr
|
||||||
cleanup
|
cleanup
|
||||||
}
|
}
|
||||||
|
|
||||||
function cleanup {
|
function cleanup {
|
||||||
trap - ERR TERM INT EXIT
|
trap - ERR TERM INT EXIT
|
||||||
exec 3>&- 4>&-
|
exec 3>&- 4>&-
|
||||||
rm "$BASH_BACK_ERROR"
|
rm "$MIAOU_BASH_ERROR"
|
||||||
}
|
}
|
||||||
|
|
||||||
# MAIN
|
# MAIN
|
||||||
@@ -136,10 +137,10 @@ trap 'on_exit $?' ERR TERM INT EXIT
|
|||||||
trap 'on_return' DEBUG
|
trap 'on_return' DEBUG
|
||||||
BASH_ARGV0="$1" && shift # to pretend script runs by itself
|
BASH_ARGV0="$1" && shift # to pretend script runs by itself
|
||||||
|
|
||||||
# magic FD + delayed tee => /dev/fd/3 means delayed stderr, /dev/fd/4 remains stderr
|
# magic FD + delayed tee => /dev/fd/3 means delayed stderr, /dev/fd/4 remains original stderr
|
||||||
exec 3> >(tee "$BASH_BACK_ERROR" >/dev/null) 4>/dev/stderr
|
exec 3> >(tee "$MIAOU_BASH_ERROR" >/dev/null) 4>/dev/stderr
|
||||||
|
|
||||||
$BASH_BACK_DEBUG && >/dev/tty echo '---stdout---'
|
$MIAOU_BASH_DEBUG && >/dev/tty echo '---stdout---'
|
||||||
# shellcheck source=/dev/null
|
# shellcheck source=/dev/null
|
||||||
source "$BASH_ARGV0" 2>&3
|
source "$BASH_ARGV0" 2>&3
|
||||||
success
|
dump_success
|
||||||
|
|||||||
Reference in New Issue
Block a user