From ad42b275a936b9ac07c9dcb292dcb958f683480a Mon Sep 17 00:00:00 2001 From: Ethan P Date: Sat, 22 Feb 2020 18:14:30 -0800 Subject: [PATCH] Add script to use for diagnosing issues --- diagnostics/info.sh | 157 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 157 insertions(+) create mode 100755 diagnostics/info.sh diff --git a/diagnostics/info.sh b/diagnostics/info.sh new file mode 100755 index 00000000..32875200 --- /dev/null +++ b/diagnostics/info.sh @@ -0,0 +1,157 @@ +#!/usr/bin/env bash +_modules=('system' 'bat' 'bat_config' 'bat_wrapper' 'tool') +_modules_consented=() + + +# ----------------------------------------------------------------------------- +# Modules: +# ----------------------------------------------------------------------------- + +_bat_:description() { + _collects "Version information for 'bat'." +} + +_bat_config_:description() { + _collects "The environment variables used by 'bat'." + _collects "The 'bat' configuration file." +} + +_bat_wrapper_:description() { + _collects "Any wrapper script used by 'bat'." +} + +_system_:description() { + _collects "Operating system name." + _collects "Operating system version." +} + +_tool_:description() { + _collects "Version information for 'less'." +} + + +# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + +_bat_:run() { + _out bat --version + _out env | grep '^BAT_\|^PAGER=' +} + +_bat_config_:run() { + if [[ -f "$(bat --config-file)" ]]; then + _out cat "$(bat --config-file)"; + fi +} + +_bat_wrapper_:run() { + if file "$(which bat)" | grep "text executable" &>/dev/null; then + _out cat "$(which bat)" + fi +} + +_system_:run() { + _out uname -srm + + if command -v "sw_vers" &>/dev/null; then _out sw_vers; fi + if command -v "lsb_release" &>/dev/null; then _out lsb_release -a; fi +} + +_tool_:run() { + _out less --version | head -n1 +} + + +# ----------------------------------------------------------------------------- +# Functions: +# ----------------------------------------------------------------------------- + +_out() { + printf "\n+" 1>&2 + printf " %s" "$@" 1>&2 + printf "\n" 1>&2 + + "$@" 2>&1 +} + +_tput() { + tput "$@" 1>&2 2>/dev/null +} + +_collects() { + printf " - %s\n" "$1" 1>&2 +} + +_ask_module() { + _tput clear + _tput cup 0 0 + +cat 1>&2 <&2 + _tput sgr0 + "_$1_:description" + _tput sgr0 + + # Print preview. + _tput setaf 3 + printf "\nThe following commands will be run:\n" 1>&2 + _tput sgr0 + declare -f "_$1_:run" \ + | sed 's/^ *//; s/;$//' \ + | grep '^_out ' \ + | sed 's/^_out //' 1>&2 + + # Prompt + printf "\n" 1>&2 + local response + while true; do + _tput cup "$(( $(tput lines 2>/dev/null || echo 22) - 1 ))" + _tput el + read -er -p "Collect $(sed 's/_/ /' <<< "$1") data? [Y/n] " response + case "$response" in + Y|y|yes|'') return 0 ;; + N|n|no) return 1 ;; + *) continue + esac + done +} + +_run_module() { + printf "========== %s ==========\n" "$1" + "_$1_:run" +} + + +# ----------------------------------------------------------------------------- +# Functions: +# ----------------------------------------------------------------------------- + +# Ask for consent. +if [[ "$1" = '-y' ]]; then + _modules_consented=("${_modules[@]}") +else + trap '_tput rmcup; exit 1' INT + _tput smcup + for _module in "${_modules[@]}"; do + if _ask_module "$_module"; then + _modules_consented+=("$_module") + fi + done + _tput rmcup +fi + +# Collect information. +for _module in "${_modules_consented[@]}"; do + _run_module "$_module" + printf "\n" +done + +