2020-11-18 15:32:09 -08:00
|
|
|
#!/bin/bash
|
2022-03-01 22:44:26 -08:00
|
|
|
# UCI SHELL REPOS ENVIRONMENT
|
|
|
|
# see README.md for details of how the system work
|
|
|
|
# In a nutshell its a set of directories that are sourced when creating a shell
|
|
|
|
# The repos allow one to organize functionality across machines, users and networks
|
|
|
|
|
|
|
|
# echo DEBUG: sourcing shell.env
|
|
|
|
|
|
|
|
# This file gets sourced early in /etc/profile for all login and
|
|
|
|
# for interactive non-login shells via /etc/bash.bashrc
|
2022-02-20 12:44:29 -08:00
|
|
|
|
2022-03-01 22:44:26 -08:00
|
|
|
# for interactive login shell (ssh is about the only case)
|
|
|
|
# loading the shell might cause issues specially using rsync
|
|
|
|
# It can be turned off per user or host in the appropriate directory
|
|
|
|
# with NO_BASH_SHELL_SSH=true
|
2021-02-05 13:00:57 -08:00
|
|
|
# this does not effect non-interactive login shells like at user first login
|
2020-11-13 10:25:04 -08:00
|
|
|
|
|
|
|
|
2022-03-01 22:44:26 -08:00
|
|
|
# if bash is not installed then don't bother to continue
|
|
|
|
! command -v bash >/dev/null 2>&1 && echo no bash command && return 1
|
|
|
|
export SHELL=$(command -v bash )
|
|
|
|
|
|
|
|
# without changing /etc/profile you can disable loading the UCI Shell system
|
|
|
|
# by uncommenting this line. It will only set up a simple prompt instead.
|
|
|
|
# if UCI shell is causing issues then one can invoke this
|
|
|
|
# BASH_SAFE_MODE=true
|
|
|
|
# todo add safemode enable/disable function that (un)comments
|
2020-11-13 10:25:04 -08:00
|
|
|
|
2022-03-01 22:44:26 -08:00
|
|
|
if [[ $BASH_SAFE_MODE ]]; then
|
|
|
|
RED='\033[0;31m';NC='\033[0m'
|
|
|
|
printf "${RED}BASH SHELL SAFE MODE ENABLED${NC}\n"
|
|
|
|
export BASH_SAFE_MODE;
|
|
|
|
return 2
|
|
|
|
fi
|
2020-11-13 10:25:04 -08:00
|
|
|
|
2022-03-01 22:44:26 -08:00
|
|
|
# You can overwrite the default environment variables in this file
|
|
|
|
# There is NOT a lot of reasons to do so unless you prefer other directory locations
|
2022-02-20 12:44:29 -08:00
|
|
|
|
2022-03-01 22:44:26 -08:00
|
|
|
# within each of those directories if a load.sh exits it will be run
|
|
|
|
# otherwise files will be sourced according to load.sh in the base repo
|
2020-11-13 10:25:04 -08:00
|
|
|
export BASH_SHELL_LOAD=$BASH_SHELL_BASE/load.sh # load.sh is default
|
2022-02-20 12:44:29 -08:00
|
|
|
|
2022-03-01 22:44:26 -08:00
|
|
|
export BASH_SHELL_STARTUP=$BASH_SHELL_BASE/startup.sh # startup.sh is default
|
2022-02-20 12:44:29 -08:00
|
|
|
|
2022-03-01 22:44:26 -08:00
|
|
|
# for non-interactive login shells (like at boot)
|
|
|
|
# load this library that allows loading additional modules
|
|
|
|
export BASH_ENV=$BASH_SHELL_BASE/module.lib # module loading functions
|
|
|
|
# otherwise comment above and uncommented next line
|
|
|
|
# export BASH_ENV=$BASH_SHELL_LOAD # load same as interactive shell, beware usually causes issues!!!
|
2020-11-13 10:25:04 -08:00
|
|
|
|
2020-11-27 09:59:16 -08:00
|
|
|
# set ssh session if non-interactive only
|
2020-11-23 15:14:18 -08:00
|
|
|
([ -n "$SSH_CONNECTION" ] || [ -n "$SSH_CLIENT" ] || [ -n "$SSH_TTY" ]) && export SSH_SESSION=true
|
|
|
|
|
2022-03-01 22:44:26 -08:00
|
|
|
# By default it will set up a master directory /shell
|
|
|
|
|
|
|
|
# DEFAULT DIRECTORY STRUCTURE
|
|
|
|
# /shell
|
|
|
|
# -- base # $BASH_SHELL_BASE=/shell/base (default) is set in /etc/profile during setup
|
|
|
|
# -- any
|
|
|
|
# -- host
|
|
|
|
# -- network
|
|
|
|
# -- networks
|
|
|
|
# -- <network name>
|
|
|
|
# -- <another network name>
|
|
|
|
# -- <hostname>
|
|
|
|
# -- $HOME/shell # user
|
|
|
|
|
|
|
|
# default loading preference is first in list is lowest and last is highest
|
|
|
|
# for example a function "test" in the BASE will be overwritten by one the HOST repo
|
|
|
|
# that is the same for startup scripts and module loading.
|
2021-11-20 17:20:44 -08:00
|
|
|
|
2022-02-20 12:44:29 -08:00
|
|
|
BASH_SHELL_DIRS="$BASH_SHELL_BASE "
|
2022-03-01 22:44:26 -08:00
|
|
|
|
2021-01-14 13:55:25 -08:00
|
|
|
declare parent
|
|
|
|
parent=$(dirname $BASH_SHELL_BASE)
|
|
|
|
|
2022-02-20 12:44:29 -08:00
|
|
|
# Any Host
|
|
|
|
BASH_SHELL_ANY_HOST=${parent}/any/host # or set to
|
|
|
|
# export BASH_SHELL_ALL_HOSTS=<some directory>
|
|
|
|
# Host
|
|
|
|
BASH_SHELL_HOST=$parent/$(hostname)
|
2021-11-20 17:20:44 -08:00
|
|
|
# export BASH_SHELL_HOST=<some directory>
|
2021-01-14 13:55:25 -08:00
|
|
|
|
2022-02-20 12:44:29 -08:00
|
|
|
BASH_SHELL_ANY_NETWORK=$parent/any/network
|
|
|
|
# export BASH_SHELL_ALL_NETWORKS=<some directory>
|
2020-11-13 10:25:04 -08:00
|
|
|
|
2021-12-31 17:38:58 -08:00
|
|
|
# by default USER shell sources will be looked for under $HOME/shell
|
2021-11-20 17:20:44 -08:00
|
|
|
# but the default directory for all users can be set manually below
|
2020-11-13 10:25:04 -08:00
|
|
|
# export BASH_SHELL_USER=<some directory under $HOME>
|
2021-11-20 17:20:44 -08:00
|
|
|
# add this export to .bashrc for custom directory. This can be done during or after using the user setup script
|
2020-11-13 10:25:04 -08:00
|
|
|
|
2022-02-20 12:44:29 -08:00
|
|
|
[[ -d $BASH_SHELL_ANY_HOST ]] && BASH_SHELL_DIRS+="$BASH_SHELL_ANY_HOST " && export BASH_SHELL_ANY_HOST
|
|
|
|
[[ -d $BASH_SHELL_ANY_NETWORK ]] && BASH_SHELL_DIRS+="$BASH_SHELL_ANY_NETWORK " && export BASH_SHELL_ANY_NETWORK
|
|
|
|
|
|
|
|
# now load and export module loading functions library
|
|
|
|
source $BASH_SHELL_BASE/module.lib
|
|
|
|
|
|
|
|
module_load network-dirs
|
2020-11-18 15:32:09 -08:00
|
|
|
|
2022-02-20 12:44:29 -08:00
|
|
|
BASH_NETWORKS_DIR=$parent/networks
|
|
|
|
# BASH_NETWORKS_DIR=<some directory> # alt directory to look for networks
|
|
|
|
export BASH_NETWORKS_DIR
|
|
|
|
|
|
|
|
# These will be loaded for all users on a host
|
|
|
|
network_dirs "$BASH_SHELL_HOST/.networks"
|
|
|
|
|
|
|
|
[[ -d $BASH_SHELL_HOST ]] && BASH_SHELL_DIRS+="$BASH_SHELL_HOST " && export BASH_SHELL_HOST
|
|
|
|
|
|
|
|
# these loaded only for specific user on a host
|
|
|
|
network_dirs "$HOME/${BASH_SHELL_USER:-"shell"}/.networks"
|
|
|
|
|
2022-03-01 22:44:26 -08:00
|
|
|
# if this directory exists it is included first in the sourcing
|
|
|
|
# if allows on the develop scripts and modules, etc for later incorporation into a repo
|
|
|
|
export BASH_SHELL_DEV=/opt/shell
|
|
|
|
BASH_SHELL_DIRS+="$BASH_SHELL_DEV "
|
|
|
|
|
2022-02-20 12:44:29 -08:00
|
|
|
export BASH_SHELL_DIRS
|
|
|
|
|
|
|
|
# echo ALL DIRS: $BASH_SHELL_DIRS
|
|
|
|
|
|
|
|
# cat $HOME/.bashrc
|
|
|
|
# source "$HOME/.bashrc"
|
2020-11-18 15:32:09 -08:00
|
|
|
|
|
|
|
# env | grep BASH
|
|
|
|
# env | grep NETWORK_DIRS
|
|
|
|
# echo ---------------------------------
|
|
|
|
# echo $BASH_SHELL_DIRS
|
|
|
|
# echo ---------------------------------
|
|
|
|
|
2022-03-01 22:44:26 -08:00
|
|
|
# echo end shell env
|
2022-02-20 12:44:29 -08:00
|
|
|
|
2021-04-19 17:25:22 -07:00
|
|
|
|
2022-03-01 22:44:26 -08:00
|
|
|
#archived ---for deletion or better explanation
|
|
|
|
|
|
|
|
# echo enabling aliases with non-interactive shell
|
|
|
|
# DEPRECATED # export BASH_USE_ALIAS=true # will source aliases for non-interactive
|
|
|
|
# if not using implicit sourcing for non-interactive shells then one can do this per script
|
|
|
|
##################
|
|
|
|
# expanding aliases is optional
|
|
|
|
# shopt -s expand_aliases
|
|
|
|
# source $BASH_SHELL_LOAD
|
|
|
|
# < your script code >
|
|
|
|
# shopt -u expand_aliases
|
|
|
|
####################
|