shell-base/shell.env

146 lines
5.7 KiB
Bash
Executable File

#!/bin/bash
# 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
# In general do not change or edit this base shell.env file
# Instead add a custom shell.env to specific shell host directory,
# user shell directory or dev shell directory
# 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
# 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
# this does not effect non-interactive login shells like at user first login
# 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
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
# 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
# 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
export BASH_SHELL_LOAD="$BASH_SHELL_BASE/load.sh" # load.sh is default"
export BASH_SHELL_STARTUP="$BASH_SHELL_BASE/startup.sh # startup.sh is default"
# 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!!!
# set ssh session if non-interactive only
([ -n "$SSH_CONNECTION" ] || [ -n "$SSH_CLIENT" ] || [ -n "$SSH_TTY" ]) && export SSH_SESSION=true
# 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
# -- host
# --<specific host>
# -- network
# -- networks
# -- <network name>
# -- <another network name>
# -- $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.
BASH_SHELL_DIRS="$BASH_SHELL_BASE "
declare parent
parent="$(dirname $BASH_SHELL_BASE)"
# Any Host
BASH_SHELL_HOST="${parent}/host"
# export BASH_SHELL_ALL_HOSTS=<some directory>
[[ -d $BASH_SHELL_HOST ]] && BASH_SHELL_DIRS+="$BASH_SHELL_HOST " && export BASH_SHELL_HOST
BASH_SHELL_NETWORK=${parent}/network
# BASH_SHELL_ALL_NETWORKS=<some directory>
[[ -d $BASH_SHELL_NETWORK ]] && BASH_SHELL_DIRS+="$BASH_SHELL_NETWORK " && export BASH_SHELL_NETWORK
# these are all the base directories to source
export BASH_SHELL_DIRS
# machine specific shell
BASH_SHELL_HOSTNAME="$parent/$([[ -f /etc/hostname ]] && cat /etc/hostname || echo nohostname)"
# BASH_SHELL_HOSTNAME=<some directory>
# if there is a host directory add it to list and export env var
# [[ -d $BASH_SHELL_HOSTNAME ]] && BASH_SHELL_DIRS+="$BASH_SHELL_HOSTNAME " && export BASH_SHELL_HOSTNAME
[[ -d $BASH_SHELL_HOSTNAME ]] && export BASH_SHELL_HOSTNAME
# 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
BASH_SHELL_DEV=${BASH_SHELL_DEV:-/opt/shell}
[[ -d $BASH_SHELL_DEV ]] && export BASH_SHELL_DEV
# #################### NETWORKING #########################
# set up default location to look for other network shell directories
BASH_NETWORKS_DIR=$parent/networks
# BASH_NETWORKS_DIR=<some directory> # alt directory to look for networks
export BASH_NETWORKS_DIR
# NOTE: one can set one or the other of these in custom shell.env under HOST/USER/DEV repo directories
# if you want to load networks with every shell
# export BASH_SHELL_HOME_NETWORK_LOAD=true
# export BASH_SHELL_NETWORKS_LOAD=true
# export BASH_SHELL_NETWORK=<some directory>
# source any custom environment or early overrides for current user, in particular BASH_SHELL_USER_DIR
[[ -f $HOME/.ucishell ]] && source $HOME/.ucishell > /dev/null
# by default USER shell sources will be looked for under $HOME/shell
export BASH_SHELL_USER_DIR=${BASH_SHELL_USER_DIR:-$HOME/shell}
# now load and export bootstrap module loading functions library so it is always available even for non-interactive shells
set -a;source $BASH_SHELL_BASE/module.base;set +a
# echo done shell.env
# echo ALL DIRS: $BASH_SHELL_DIRS
# env | grep BASH
# env | grep NETWORK_DIRS
# echo ---------------------------------
# echo $BASH_SHELL_DIRS
# echo ---------------------------------
# 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
# ###################