added debug module with debug function - a first cut

load.sh now loads debug module or a noop
file library, file.lib
   - refactored _find function, added alias superceed
       * added h option to include .hidden files
       *
   - added build_file function to append file to another
refactored comment and uncomment functions
added find_mountpoint function to filesystem module
added ssh_config builder function and ssh override to use it.
added github module with binary release fetch function (needs work)
master
David Kebler 2020-12-03 20:48:04 -08:00
parent 1304c3afe7
commit 22b3c0cc36
15 changed files with 192 additions and 34 deletions

4
alias/superceed Normal file
View File

@ -0,0 +1,4 @@
# any binary superceed by a function with
# initial binary available as s<name> as in super
alias find="_find"
alias sfind="command find"

1
env/02-defaults.env vendored
View File

@ -2,5 +2,4 @@
# export EDITOR=atom
# export ELECTRON_TRASH=gio
export EDITOR=nano
export BROWSER=google-chrome

View File

@ -1,14 +1,10 @@
#!/bin/bash
function comment_line() {
local regex="${1:?}"
local file="${2:?}"
local comment_mark="${3:-#}"
sed -ri "s:^([ ]*)($regex):\\1$comment_mark\\2:" "$file"
function comment() {
[[ $# -lt 2 ]] && echo must supply pattern and file && return 1
sed -i '/'$1'/s/^#*/#/g' "$2"
}
function uncomment_line() {
local regex="${1:?}"
local file="${2:?}"
local comment_mark="${3:-#}"
sed -ri "s:^([ ]*)[$comment_mark]+[ ]?([ ]*$regex):\\1\\2:" "$file"
function uncomment() {
[[ $# -lt 2 ]] && echo must supply pattern and file && return 1
sed -i '/'$1'/s/^#*//g' "$2"
}

78
function/ssh Normal file
View File

@ -0,0 +1,78 @@
#!/bin/bash
# this will superceed the ssh binary in order to source all the config files
module_load file # loads find and build_file
function ssh_config () {
local CDIRS
local CDIR
local DIRS
local DIR
local PDIRS
declare OPTION
declare OPTARG
declare OPTIND
while getopts 'd:' OPTION; do
# echo $OPTION $OPTARG
case "$OPTION" in
d)
PDIRS=$OPTARG
# echo option d: $DIRS
;;
*)
echo unknown option $OPTION
;;
esac
done
shift $(( OPTIND - 1 ))
local OUTPUT=${*:-"$BASH_SHELL_BASE/ssh/config/_config"}
[[ $PDIRS ]] && DIRS=($PDIRS) || DIRS=(${BASH_SHELL_DIRS} "$HOME/$BASH_SHELL_USER")
# echo DIRS "${DIRS[@]}"
# echo $OUTPUT
CDIRS=()
j=0
cnt=${#DIRS[@]}
for ((i=0;i<cnt;i++)); do
# echo $i of $cnt
DIR="${DIRS[i]}$([[ ! $PDIRS ]] && echo /ssh/config)"
# echo ----- trying $DIR
[ -d $DIR ] && CDIRS[j]=$DIR;j+=1 || echo no directory $DIR
done
# CDIRS=("${CDIRS[@]}")
# echo ${CDIRS[@]}
local HEADER="##############################################################
# THIS FILE IS GENERATED BY function ssh_config. Do not edit #
# It is created by combination of ssh configuration files #
# which are listed in a comment line before each #
# It is used by the ssh function which then calls ssh binary #
##############################################################"
debug ssh config file at: $OUTPUT
mkdir -p "$(dirname "$OUTPUT")"
echo -e "$HEADER" > $OUTPUT
build_file "/etc/ssh/ssh_config" $OUTPUT
# echo existing dirs ${CDIRS[@]}
for CDIR in "${CDIRS[@]}"
do
# FILES=$(find -n '*.cfg' -d 0 $CDIR)
for f in $(find -n '*.cfg' -p 'archive off' -d 0 $CDIR) ;
do
# echo "Processing $f";
[[ $f ]] && build_file "$f" $OUTPUT
done
done
build_file "$HOME/.ssh/config" $OUTPUT
}
ssh () {
if [[ $1 = "-F" ]]; then
CONFIG=${2:-"$BASH_SHELL_BASE/ssh/config/_config"}
shift;shift
fi
CONFIG=${CONFIG:-"$BASH_SHELL_BASE/ssh/config/_config"}
[[ -f "$CONFIG" ]] || ssh_config "$CONFIG"
command ssh -F $CONFIG "$@"
}

15
load.sh
View File

@ -1,7 +1,7 @@
#!/bin/bash
# [[ ! $- == *i* ]] && exec >> ~/logs/load.log && exec 2>&1
# export BASH_DEBUG=true
function nilog () {
[[ ! $- == *i* ]] && echo -e "-----\n $USER $*" &>> ~/logs/load.log
}
@ -28,6 +28,15 @@ DIR=${1:-$(dirname ${BASH_SOURCE[0]})}
module_load file
[[ $? -ne 0 ]] && echo unable to access the file module, aboarting load && return 1
module_load debug
if [[ $? -ne 0 ]]; then
echo "unable to load a 'debug' module using a noop for debug function"
# noop
function debug () {
:
}
fi
([[ $BASH_ENV ]] && [[ ! $- == *i* ]] && [[ $BASH_USE_ALIAS ]]) && shopt -s expand_aliases
function shell_process_directory () {
@ -92,12 +101,12 @@ unset BASH_SHELL_BASE_LOADED
unset BASH_SHELL_LOADED
# echo bash shell dirs: $BASH_SHELL_DIRS
DIRS=${1:-$BASH_SHELL_DIRS}
dirs=${1:-$BASH_SHELL_DIRS}
BASH_SHELL_BASE_SUBDIRS=$(cat "$BASH_SHELL_BASE/.bash-shell-include")
# echo subdir includes: $BASH_SHELL_BASE_SUBDIRS
for dir in $DIRS; do
for dir in $dirs; do
# echo $dir
shell_process_directory $dir
[[ $dir == "$BASH_SHELL_BASE" ]] && BASH_SHELL_BASE_LOADED=true

View File

@ -7,7 +7,7 @@ local NAME
DIR=$1
NAME=$2
# echo finding $NAME in $DIR
FILE="$(find ${DIR} -type f -name "${NAME}.mod" -o -name "${NAME}".lib -o -name "${NAME}".func -o -name "${NAME}".sh)"
FILE="$(command find ${DIR} -type f -name "${NAME}.mod" -o -name "${NAME}".lib -o -name "${NAME}".func -o -name "${NAME}".sh)"
# echo files found $FILE
COUNT=0
if [ "$FILE" ]; then

View File

@ -0,0 +1,30 @@
#!/bin/bash
# if you have run into github api anonymous access limits which happens during debugging/dev then add user and token here or sourced from a separate file
# set to location for tokens in file
source ~/githubapitoken
if [ "$GITHUB_TOKEN" != "" ]; then
echo using access token with script
echo $GITHUB_USER $GITHUB_TOKEN
fi
DIR=$(dirname "$(readlink -f "$0")") || exit
ORG=$1
REPO=$2
TYPE=$3
NAME=$4
EXCLUDE=$5
URL=$(curl -s https://api.github.com/repos/$ORG/$REPO/releases/latest \
# | grep 'browser_download_url.*'$TYPE''
# | sed -n -e 's/^.*: //p' \
# | sed 's/"//g'
)
echo "Pulling $URL"
TODO put back tokens here.
# wget $URL -O $NAME.$TYPE
# chmod +x $DIR/$NAME.$TYPE
# ln -s $DIR/$NAME.$TYPE /opt/bin/$NAME

View File

@ -0,0 +1,8 @@
#!/bin/bash
# TODO allow debug to have managment flags and levels
function debug () {
[[ $BASH_DEBUG ]] && echo -e "#### DEBUG ####\n $@ \n#####" >&2
}
# alias debug_on="sudo -i uncomment BASH_DEBUG /etc/bash.bashrc"
# alias debug_off="sudo -i comment BASH_DEBUG /etc/bash.bashrc"

View File

@ -1,5 +1,16 @@
#!/bin/bash
# export BASH_DEBUG=true
build_file () {
[[ -f "$2" ]] || (echo "output file $2 does not exist";return 1)
if [[ -f "$1" ]]; then
echo -e "\n####### ADDED $1 ########" >> $2
cat "$1" | sed '/^\s*#/d' | sed '/^$/{:a;N;s/\n$//;ta}' >> $2
else debug "no such file $1 to append"
fi
}
function lines_2_str () {
[[ ! -f "$1" ]] && return 1
local str=''
@ -19,9 +30,9 @@ done < $1
return 0
}
function super_find () {
# echo super_find $@ >&2
# USAGE
# find, superceeds find use `command find` to get the super
function _find () {
# USAGE
# all option arguments that contain globs/wildcards must be quoted to avoid expansion
# f sets path and file excludes from a supplied file path
# all lines ending in / will be treated as directory names to ignore, otherwise files
@ -32,17 +43,17 @@ function super_find () {
# if no directory is given it will attempt to source the present working directory
# example:
# source_dir -p "archive" -x '"*.off" "*.md"' -d 0 # $DIR/$SUBDIR
declare OPTION
declare OPTARG
declare OPTIND
local EXCLUDE_FILE
local PATHS
local NAMES
local ENAMES
local DEPTH=1
local VERBOSE=0
local HIDDEN
while getopts 'p:d:e:n:f:' OPTION; do
declare OPTION
declare OPTARG
declare OPTIND
while getopts 'p:d:e:n:f:h' OPTION; do
case "$OPTION" in
f)
EXCLUDE_FILE=$OPTARG
@ -66,6 +77,10 @@ case "$OPTION" in
DEPTH=$OPTARG
# echo "SOURCING TO DEPTH (0=any)" "$DEPTH"
;;
h)
HIDDEN=true
# echo "SOURCING TO DEPTH (0=any)" "$DEPTH"
;;
*)
echo unknown option $OPTION
;;
@ -78,8 +93,8 @@ local DIR
DIR="$*"
if [ ! "$DIR" ]; then
if [ -v PS1 ]; then
echo no directory to source provided
echo sourcing present working directory $(pwd)
echo no directory provided to search
echo searching present working directory $(pwd)
read -p "Do you want to continue? " -n 1 -r
[[ $REPLY =~ ^[Yy]$ ]] && DIR=$(pwd) || return 1
else
@ -92,10 +107,11 @@ fi
# echo dir $DIR
local FIND
FIND="find $DIR"
FIND="command find $DIR"
FIND+=$([ ! $DEPTH == 0 ] && echo " -maxdepth $DEPTH ")
# ignore all .name and .path by default
FIND+=" -type f ! -path \"*/.*/*\" ! -name \".*\" "
FIND+=" -type f "
# include HIDDEN files and directories IS FALSE BY DEFULT
[[ ! $HIDDEN ]] && FIND+="! -path \"*/.*/*\" ! -name \".*\" "
local name
local path
@ -135,21 +151,23 @@ fi
# echo
# echo find dir: $DIR >&2
# echo find command: $FIND >&2
debug "find command: $FIND"
local FILES
FILES=$(eval $FIND | sort)
echo $FILES
[[ $FILES ]] && echo $FILES
return 0
}
source_dir () {
# echo passed: $*
debug function: source_dir
local FILES
FILES=$(super_find "$@")
FILES=$(_find "$@") # find function
# echo $FILES >&2
[[ $? -ne 0 ]] && return 1
for f in $FILES; do
# echo sourcing: $f
# echo sourcing: $f >&2
source "$f"
done

View File

@ -4,3 +4,14 @@ mounted () {
[[ ! $1 ]] && echo no mount point to test && return 2
mountpoint "$1" &> /dev/null && echo yes || return 1
}
# peals back sub-directories until if finds a mountpoing
find_mountpoint () {
local dir=$1
if [[ ! $dir = "/" ]]; then
# echo trying $dir for mountpoint
[[ $(mounted $dir) ]] && echo $dir || find_mountpoint "$(dirname $1)"
else
return 1
fi
}

View File

@ -11,4 +11,7 @@ if ([ -n "$SSH_CONNECTION" ] || [ -n "$SSH_CLIENT" ] || [ -n "$SSH_TTY" ]); then
export SSH_SESSION=true
source /etc/profile
fi
# global debug on or off via debug_on debug_off aliases
# can add this export to any file
#export BASH_DEBUG=true
source $BASH_SHELL_LOAD

View File

@ -2,6 +2,6 @@
# echo "$USER .bashrc"
# processing user's shell repo if base was loaded
[[ $BASH_SHELL_BASE_LOADED = true ]] && \
BASH_SHELL_USER=${BASH_SHELL_USER:-"bash/shell"} && \
export BASH_SHELL_USER=${BASH_SHELL_USER:-"bash/shell"} && \
[[ -d $HOME/$BASH_SHELL_USER ]] && shell_process_directory "$HOME/$BASH_SHELL_USER" ||\
echo no user shell directory $HOME/$BASH_SHELL_USER to process, create one or clone a template

View File

@ -55,6 +55,7 @@ export BASH_USE_ALIAS=true # will source aliases for non-interactive
# identify a network name that this host resides on
# make a directory of the same name
# if unset then only /all will be sourced
# TODO just read all directories in BASH_SHELL_NETWORK.
export NETWORK_DOMAINS=(238.kebler.net 645.kebler.net 3115.kebler.net)
# network domain folder entry will be made for each domain set, first is home domain, others via vpn
if [[ $NETWORK_DOMAINS ]]; then

1
ssh/config/readme.md Normal file
View File

@ -0,0 +1 @@
*anything in /config will be used as configuration file with ssh function that calls ssh binary*