feat: clean up shell.env, improved comments, added in BAHS_SHELL_DEV repo /opt/shell default
feat: add ability to follow link -L when finding modules. Make is easier to have things loaded and still available for non-interactive shells via module_load feat: profile, better comments, refactored to have safe mode where no shell is loadedmaster
parent
51f73ccc02
commit
9988dd1ed1
|
@ -59,3 +59,8 @@ if sourcing some file depends on another preface with numbers to put it before.
|
||||||
|
|
||||||
Be aware that an alias or function set in the repo could be subsuming some existing binary or script.
|
Be aware that an alias or function set in the repo could be subsuming some existing binary or script.
|
||||||
|
|
||||||
|
|
||||||
|
interactive non-login shells source /etc/profile via /etc/bash.bashrc otherwise non-interactive non-login shells only load a basic path and access to the module library. One needs to one off source the modules needed for the script. Aliases too are not loaded in this case.
|
||||||
|
|
||||||
|
Thus for non-interactive/non-login shells it is best to symlink a non-module file/directory in modules folder in order to give access to non-interactive shells
|
||||||
|
|
||||||
|
|
|
@ -1,23 +0,0 @@
|
||||||
{
|
|
||||||
"protocol": "sftp",
|
|
||||||
"host": "router",
|
|
||||||
"port": 22,
|
|
||||||
"user": "sysadmin",
|
|
||||||
"pass": "",
|
|
||||||
"promptForPass": false,
|
|
||||||
"remote": "/home/sysadmin/.kbd-aliases",
|
|
||||||
"local": "",
|
|
||||||
"agent": "env",
|
|
||||||
"privatekey": "",
|
|
||||||
"passphrase": "",
|
|
||||||
"hosthash": "",
|
|
||||||
"ignorehost": true,
|
|
||||||
"connTimeout": 10000,
|
|
||||||
"keepalive": 10000,
|
|
||||||
"keyboardInteractive": false,
|
|
||||||
"keyboardInteractiveForPass": false,
|
|
||||||
"remoteCommand": "",
|
|
||||||
"remoteShell": "",
|
|
||||||
"watch": [],
|
|
||||||
"watchTimeout": 500
|
|
||||||
}
|
|
|
@ -1,5 +0,0 @@
|
||||||
# bower
|
|
||||||
alias bidv="bower install --save-dev"
|
|
||||||
alias brdv="bower uninstall --save-dev"
|
|
||||||
alias bi="bower install --save"
|
|
||||||
alias br="bower uninstall --save"
|
|
|
@ -1,9 +0,0 @@
|
||||||
alias iptl="sudo iptables -S"
|
|
||||||
alias iptlf="sudo iptables -L"
|
|
||||||
alias iptln="sudo iptables -L -t nat"
|
|
||||||
alias iptd="sudo /etc/iptables/iptables-default.sh"
|
|
||||||
alias iptf="sudo /etc/iptables/iptables-flush.sh"
|
|
||||||
alias ipts="sudo systemctl start iptables"
|
|
||||||
alias iptst="sudo systemctl status iptables"
|
|
||||||
alias iptstp="sudo systemctl stop iptables"
|
|
||||||
alias iptstpp="sudo /etc/iptables/iptables-default.sh"
|
|
|
@ -1,14 +0,0 @@
|
||||||
# if parameter(s) is needed instead of just at the end of alias then create a "little" function instead.
|
|
||||||
# like mymv() { mv $1 $2; }
|
|
||||||
# or rsynchc() { rsync --help | grep "\-$1"; }
|
|
||||||
|
|
||||||
|
|
||||||
alias sdns="nmcli device show eth0 | grep IP4.DNS"
|
|
||||||
# shows running processes with ntfs that might hang gparted, then kill with next command
|
|
||||||
alias ntfs='ps -ef | egrep "dosfsck|ntfs"'
|
|
||||||
|
|
||||||
alias lo="gnome-session-quit"
|
|
||||||
|
|
||||||
#mongo via docker container name mongodbmo
|
|
||||||
alias mg="docker exec -it mongodbserver mongo"
|
|
||||||
alias mongodb="docker exec -it mongodbserver mongo"
|
|
|
@ -1,135 +0,0 @@
|
||||||
#!/bin/bash
|
|
||||||
|
|
||||||
function lines_2_str () (
|
|
||||||
[[ ! -f "$1" ]] && return 1
|
|
||||||
local str=''
|
|
||||||
local lines=$(cat "$1")
|
|
||||||
for line in $lines ; do
|
|
||||||
str+='"'$line'" '
|
|
||||||
done
|
|
||||||
echo $str
|
|
||||||
return 0
|
|
||||||
)
|
|
||||||
|
|
||||||
function source_dir () {
|
|
||||||
# USAGE
|
|
||||||
# will never source source .files or .directories
|
|
||||||
# all option arguments that contain globs/wildcards must be quoted to avoid expansion
|
|
||||||
# p option excludes additional paths below of the given name (and depth)
|
|
||||||
# d option sets the directory depth which is current directy by default, 0 is all
|
|
||||||
# x excludes file globs
|
|
||||||
# f inclucdes only file globs otherwise it's all except .files
|
|
||||||
# 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
|
|
||||||
|
|
||||||
while getopts 'p:d:e:n:f:' OPTION; do
|
|
||||||
case "$OPTION" in
|
|
||||||
f)
|
|
||||||
EXCLUDE_FILE=$OPTARG
|
|
||||||
# echo EXCLUDE FILE $EXCLUDE_FILE
|
|
||||||
;;
|
|
||||||
p)
|
|
||||||
# PATHS=("$OPTARG")
|
|
||||||
IFS=',' read -r -a PATHS <<< "$OPTARG"
|
|
||||||
# echo EXCLUDING THESE PATHS ${PATHS[*]}
|
|
||||||
;;
|
|
||||||
e)
|
|
||||||
IFS=',' read -r -a ENAMES <<< "${OPTARG}"
|
|
||||||
# echo EXCLUDING THESE FILE NAMES ${ENAMES[*]}
|
|
||||||
;;
|
|
||||||
n)
|
|
||||||
# NAMES=("$OPTARG")
|
|
||||||
IFS=',' read -r -a NAMES <<< "${OPTARG}"
|
|
||||||
# echo INCLUDING ONLY THESE FILE NAMES ${NAMES[*]}
|
|
||||||
;;
|
|
||||||
d)
|
|
||||||
DEPTH=$OPTARG
|
|
||||||
# echo "SOURCING TO DEPTH (0=any)" "$DEPTH"
|
|
||||||
;;
|
|
||||||
*)
|
|
||||||
echo unknown option $OPTION
|
|
||||||
;;
|
|
||||||
esac
|
|
||||||
done
|
|
||||||
|
|
||||||
shift $(( OPTIND - 1 ))
|
|
||||||
|
|
||||||
local DIR
|
|
||||||
DIR="$@"
|
|
||||||
if [ ! "$DIR" ]; then
|
|
||||||
if [ -v PS1 ]; then
|
|
||||||
echo no directory to source provided
|
|
||||||
echo sourcing present working directory $(pwd)
|
|
||||||
read -p "Do you want to continue? " -n 1 -r
|
|
||||||
[[ $REPLY =~ ^[Yy]$ ]] && DIR=$(pwd) || return 1
|
|
||||||
else
|
|
||||||
return 1
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
|
|
||||||
[ ! -d "$DIR" ] && echo " directory $DIR does not exist, aborting" && return 1
|
|
||||||
|
|
||||||
# echo dir $DIR
|
|
||||||
|
|
||||||
local FIND
|
|
||||||
FIND="find $DIR"
|
|
||||||
FIND+=$([ ! $DEPTH == 0 ] && echo " -maxdepth $DEPTH ")
|
|
||||||
# ignore all .name and .path by default
|
|
||||||
# TODO change to having a string
|
|
||||||
FIND+=" -type f ! -path \"*/.*/*\" ! -name \".*\" "
|
|
||||||
|
|
||||||
|
|
||||||
local name
|
|
||||||
local path
|
|
||||||
|
|
||||||
if [[ -f $EXCLUDE_FILE ]]; then
|
|
||||||
local ignores=$(cat "$EXLUCDE_FILE")
|
|
||||||
for exclude in $ignores ; do
|
|
||||||
[[ "$exclude" =~ '/'$ ]] && PATHS+=(${exclude::-1}) || ENAMES+=($exclude)
|
|
||||||
done
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [[ ${PATHS[0]} ]]; then
|
|
||||||
for path in ${PATHS[@]}; do
|
|
||||||
# echo excluding $path
|
|
||||||
FIND+=$(echo ' ! -path "*/'$path'/*"')
|
|
||||||
done
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [[ ${ENAMES[0]} ]]; then
|
|
||||||
for name in ${ENAMES[@]}; do
|
|
||||||
# echo excluding name $name
|
|
||||||
FIND+=$(echo " ! -name ${name}")
|
|
||||||
done
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [[ ${NAMES[0]} ]]; then
|
|
||||||
for name in ${NAMES[@]}; do
|
|
||||||
# echo only finding $name
|
|
||||||
FIND+=$(echo " -name ${name}")
|
|
||||||
done
|
|
||||||
fi
|
|
||||||
|
|
||||||
echo
|
|
||||||
echo find dir: $DIR
|
|
||||||
echo find command: $FIND
|
|
||||||
|
|
||||||
local FILES
|
|
||||||
FILES=$(eval $FIND | sort)
|
|
||||||
# echo $FILES | xargs -n 1
|
|
||||||
for f in $FILES; do
|
|
||||||
echo sourcing: $f
|
|
||||||
# source "$f"
|
|
||||||
done
|
|
||||||
|
|
||||||
}
|
|
|
@ -1,125 +0,0 @@
|
||||||
#!/bin/bash
|
|
||||||
|
|
||||||
function source_dir () {
|
|
||||||
# USAGE
|
|
||||||
# will never source source .files or .directories
|
|
||||||
# all option arguments that contain globs/wildcards must be quoted to avoid expansion
|
|
||||||
# f sets path and file excludes from a supplied file path
|
|
||||||
# p option excludes additional paths below of the given name (and depth)
|
|
||||||
# d option sets the directory depth which is current directy by default, 0 is all
|
|
||||||
# x excludes file globs
|
|
||||||
# n inclucdes only file globs otherwise it's all except .files
|
|
||||||
# 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
|
|
||||||
|
|
||||||
while getopts 'p:d:e:n:f:' OPTION; do
|
|
||||||
case "$OPTION" in
|
|
||||||
f)
|
|
||||||
EXCLUDE_FILE=$OPTARG
|
|
||||||
# echo EXCLUDE FILE $EXCLUDE_FILE
|
|
||||||
;;
|
|
||||||
p)
|
|
||||||
# PATHS=("$OPTARG")
|
|
||||||
IFS=',' read -r -a PATHS <<< "$OPTARG"
|
|
||||||
# echo EXCLUDING THESE PATHS ${PATHS[*]}
|
|
||||||
;;
|
|
||||||
e)
|
|
||||||
IFS=',' read -r -a ENAMES <<< "${OPTARG}"
|
|
||||||
# echo EXCLUDING THESE FILE NAMES ${ENAMES[*]}
|
|
||||||
;;
|
|
||||||
n)
|
|
||||||
# NAMES=("$OPTARG")
|
|
||||||
IFS=',' read -r -a NAMES <<< "${OPTARG}"
|
|
||||||
# echo INCLUDING ONLY THESE FILE NAMES ${NAMES[*]}
|
|
||||||
;;
|
|
||||||
d)
|
|
||||||
DEPTH=$OPTARG
|
|
||||||
# echo "SOURCING TO DEPTH (0=any)" "$DEPTH"
|
|
||||||
;;
|
|
||||||
*)
|
|
||||||
echo unknown option $OPTION
|
|
||||||
;;
|
|
||||||
esac
|
|
||||||
done
|
|
||||||
|
|
||||||
shift $(( OPTIND - 1 ))
|
|
||||||
|
|
||||||
local DIR
|
|
||||||
DIR="$@"
|
|
||||||
if [ ! "$DIR" ]; then
|
|
||||||
if [ -v PS1 ]; then
|
|
||||||
echo no directory to source provided
|
|
||||||
echo sourcing present working directory $(pwd)
|
|
||||||
read -p "Do you want to continue? " -n 1 -r
|
|
||||||
[[ $REPLY =~ ^[Yy]$ ]] && DIR=$(pwd) || return 1
|
|
||||||
else
|
|
||||||
return 1
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
|
|
||||||
[ ! -d "$DIR" ] && echo " directory $DIR does not exist, aborting" && return 1
|
|
||||||
|
|
||||||
# echo dir $DIR
|
|
||||||
|
|
||||||
local FIND
|
|
||||||
FIND="find $DIR"
|
|
||||||
FIND+=$([ ! $DEPTH == 0 ] && echo " -maxdepth $DEPTH ")
|
|
||||||
# ignore all .name and .path by default
|
|
||||||
# TODO change to having a string
|
|
||||||
FIND+=" -type f ! -path \"*/.*/*\" ! -name \".*\" "
|
|
||||||
|
|
||||||
|
|
||||||
local name
|
|
||||||
local path
|
|
||||||
|
|
||||||
if [[ -f $EXCLUDE_FILE ]]; then
|
|
||||||
local ignores=$(cat "$EXLUCDE_FILE")
|
|
||||||
for exclude in $ignores ; do
|
|
||||||
[[ "$exclude" =~ '/'$ ]] && PATHS+=(${exclude::-1}) || ENAMES+=($exclude)
|
|
||||||
done
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [[ ${PATHS[0]} ]]; then
|
|
||||||
for path in ${PATHS[@]}; do
|
|
||||||
# echo excluding $path
|
|
||||||
FIND+=$(echo ' ! -path "*/'$path'/*"')
|
|
||||||
done
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [[ ${ENAMES[0]} ]]; then
|
|
||||||
for name in ${ENAMES[@]}; do
|
|
||||||
# echo excluding name $name
|
|
||||||
FIND+=$(echo " ! -name ${name}")
|
|
||||||
done
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [[ ${NAMES[0]} ]]; then
|
|
||||||
for name in ${NAMES[@]}; do
|
|
||||||
# echo only finding $name
|
|
||||||
FIND+=$(echo " -name ${name}")
|
|
||||||
done
|
|
||||||
fi
|
|
||||||
|
|
||||||
echo
|
|
||||||
echo find dir: $DIR
|
|
||||||
echo find command: $FIND
|
|
||||||
|
|
||||||
local FILES
|
|
||||||
FILES=$(eval $FIND | sort)
|
|
||||||
# echo $FILES | xargs -n 1
|
|
||||||
for f in $FILES; do
|
|
||||||
echo sourcing: $f
|
|
||||||
# source "$f"
|
|
||||||
done
|
|
||||||
|
|
||||||
}
|
|
4
load.sh
4
load.sh
|
@ -25,9 +25,9 @@ unset BASH_SHELL_LOADED
|
||||||
|
|
||||||
module_load shell-process-directory
|
module_load shell-process-directory
|
||||||
for dir in ${1:-$BASH_SHELL_DIRS}; do
|
for dir in ${1:-$BASH_SHELL_DIRS}; do
|
||||||
# echo $dir
|
echo $dir $BASH_SHELL_BASE
|
||||||
shell_process_directory $dir
|
shell_process_directory $dir
|
||||||
[[ $dir == "$BASH_SHELL_BASE" ]] && BASH_SHELL_BASE_LOADED=true
|
[[ "$dir" = "$BASH_SHELL_BASE" ]] && export BASH_SHELL_BASE_LOADED=true
|
||||||
done
|
done
|
||||||
|
|
||||||
export BASH_SHELL_LOADED=true
|
export BASH_SHELL_LOADED=true
|
||||||
|
|
|
@ -9,7 +9,7 @@ local NAME
|
||||||
DIR=$1
|
DIR=$1
|
||||||
NAME=$2
|
NAME=$2
|
||||||
# echo finding $NAME in $DIR
|
# echo finding $NAME in $DIR
|
||||||
FILE="$(command find ${DIR} -type f -name "${NAME}.mod" -o -name "${NAME}".lib -o -name "${NAME}".func -o -name "${NAME}".sh)"
|
FILE="$(command find -L ${DIR} -type f -name "${NAME}.mod" -o -name "${NAME}".lib -o -name "${NAME}".func -o -name "${NAME}".sh)"
|
||||||
# echo files found $FILE
|
# echo files found $FILE
|
||||||
COUNT=0
|
COUNT=0
|
||||||
if [ "$FILE" ]; then
|
if [ "$FILE" ]; then
|
||||||
|
|
|
@ -1,164 +0,0 @@
|
||||||
#!/bin/bash
|
|
||||||
|
|
||||||
BLOCK_FILE=""
|
|
||||||
BLOCK_NAME='BLOCK'
|
|
||||||
BLOCK_COMMENT_CHAR="#"
|
|
||||||
# a comment added before the block
|
|
||||||
BLOCK_DESCRIPTION=""
|
|
||||||
|
|
||||||
function __update_block () {
|
|
||||||
if [ ! -z "$BLOCK_FILE" ]; then
|
|
||||||
mkdir -p "$(dirname $BLOCK_FILE)"
|
|
||||||
touch $BLOCK_FILE
|
|
||||||
tail -c1 $BLOCK_FILE | read -r _ || echo >> $BLOCK_FILE
|
|
||||||
fi
|
|
||||||
BLOCK_BEGIN="$BLOCK_COMMENT_CHAR --- ${BLOCK_NAME} BEGIN ---"
|
|
||||||
BLOCK_END="$BLOCK_COMMENT_CHAR --- ${BLOCK_NAME} END ---"
|
|
||||||
BLOCK="\n$([ -z "$BLOCK_DESCRIPTION" ] || echo "${BLOCK_COMMENT_CHAR} ${BLOCK_DESCRIPTION}\n")${BLOCK_BEGIN}\n${BLOCK_END}"
|
|
||||||
# for testing
|
|
||||||
# BLOCK="a line before\n${BLOCK}\nanother line outside"
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
# set block to defaults
|
|
||||||
__update_block
|
|
||||||
# echo -e "default block template follows use: block-set before block-add to change>\n" $BLOCK
|
|
||||||
|
|
||||||
function set_block () {
|
|
||||||
|
|
||||||
declare OPTION
|
|
||||||
declare OPTARG
|
|
||||||
declare OPTIND
|
|
||||||
|
|
||||||
while getopts ':f:c:d:n:' OPTION; do
|
|
||||||
# echo $OPTION $OPTARG
|
|
||||||
case "$OPTION" in
|
|
||||||
f)
|
|
||||||
BLOCK_FILE=$OPTARG
|
|
||||||
echo File set to $BLOCK_FILE
|
|
||||||
;;
|
|
||||||
c)
|
|
||||||
BLOCK_COMMENT_CHAR=$OPTARG
|
|
||||||
;;
|
|
||||||
d)
|
|
||||||
BLOCK_DESCRIPTION=$OPTARG
|
|
||||||
;;
|
|
||||||
n)
|
|
||||||
BLOCK_NAME=$OPTARG
|
|
||||||
;;
|
|
||||||
*)
|
|
||||||
echo unknown option $OPTION
|
|
||||||
;;
|
|
||||||
esac
|
|
||||||
done
|
|
||||||
|
|
||||||
shift $(( OPTIND - 1 ))
|
|
||||||
|
|
||||||
__update_block
|
|
||||||
# echo -e "new block template follows use: block-add >\n" $BLOCK
|
|
||||||
# echo ----
|
|
||||||
echo $([ -e "$BLOCK_FILE" ] || echo "Warning: No output file set yet, use block-set -f <path>" && echo "block will be placed in $BLOCK_FILE")
|
|
||||||
# echo -------
|
|
||||||
}
|
|
||||||
|
|
||||||
function add_block () {
|
|
||||||
block_remove_content
|
|
||||||
# only add if it doesn't exist, existance is only based on block begin
|
|
||||||
local ADD
|
|
||||||
ADD=$(echo "${BLOCK}" | sed 's/\//\\\//g')
|
|
||||||
if [ -e "$BLOCK_FILE" ]; then
|
|
||||||
sed -n '/^[ \t]*'"${BLOCK_BEGIN}"'/{q50}' "${BLOCK_FILE}"
|
|
||||||
[ $? == 50 ] && return
|
|
||||||
WHERE=${1-${BLOCK_BEGIN}} # default is end
|
|
||||||
# echo Where $WHERE
|
|
||||||
sed -i '/'"${WHERE}"'/{s/.*/&\n'"${ADD}"'/;h};${x;/^$/{s//'"$ADD"'/;H};x}' "${BLOCK_FILE}"
|
|
||||||
[[ $1 ]] && block_add_line $1
|
|
||||||
else
|
|
||||||
echo "no file set in which to add block, use: ${RED_COLOR}set-block -f <file path>"
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
list_block () {
|
|
||||||
if [[ $1 =~ -?r(aw)? ]]; then
|
|
||||||
echo $BLOCK
|
|
||||||
else
|
|
||||||
local block
|
|
||||||
block=${BLOCK##'\n'}'\n'
|
|
||||||
printf "$block"
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
get_block_file () {
|
|
||||||
[ $BLOCK_FILE ] && echo ${BLOCK_FILE}
|
|
||||||
[[ $1 = -v ]] && echo "no output file set, use set_block -f <file-path>"
|
|
||||||
}
|
|
||||||
|
|
||||||
modify_block () {
|
|
||||||
sed -i '/^'"${BLOCK_BEGIN}"'/,/^'"${BLOCK_END}"$'/ {
|
|
||||||
/'"${BLOCK_BEGIN}"'/b
|
|
||||||
/'"${BLOCK_END}"'/b
|
|
||||||
s/'"${1}"'/'"${2}"'/
|
|
||||||
}' "${BLOCK_FILE}"
|
|
||||||
}
|
|
||||||
|
|
||||||
block_remove_leading () {
|
|
||||||
printf "%s\n" "$(tac $BLOCK_FILE \
|
|
||||||
| sed '/'"${BLOCK_BEGIN}"'/,/^./{ /^[ \t]*$/d}' | tac)" > $BLOCK_FILE
|
|
||||||
}
|
|
||||||
|
|
||||||
remove_block () {
|
|
||||||
[[ "$BLOCK_DESCRIPTION" ]] || sed -ni '/'"${BLOCK_BEGIN}"'/{x;d;};1h;1!{x;p;};${x;p;}' "${BLOCK_FILE}"
|
|
||||||
block_remove_leading
|
|
||||||
sed -i '/^'"${BLOCK_BEGIN}"'/,/^'"${BLOCK_END}"$'/ {
|
|
||||||
d
|
|
||||||
}' "${BLOCK_FILE}"
|
|
||||||
}
|
|
||||||
|
|
||||||
block_remove_content () {
|
|
||||||
sed -i '/^'"${BLOCK_BEGIN}"'/,/^'"${BLOCK_END}"$'/ {
|
|
||||||
/'"${BLOCK_BEGIN}"'/b
|
|
||||||
/'"${BLOCK_END}"'/b
|
|
||||||
d
|
|
||||||
}' "${BLOCK_FILE}"
|
|
||||||
}
|
|
||||||
|
|
||||||
block_add_line () {
|
|
||||||
# echo argument count $#, $1, $2, $3
|
|
||||||
local ADD
|
|
||||||
ADD="/^${BLOCK_BEGIN}/a\\${1}"
|
|
||||||
if [ $# -gt 1 ]; then
|
|
||||||
if [ "$1" == "--end" ];then
|
|
||||||
ADD="/${BLOCK_END}/i\\${2}"
|
|
||||||
else
|
|
||||||
if [ "$1" == "--before" ];then
|
|
||||||
ADD="/${2}/i\\${3}"
|
|
||||||
else
|
|
||||||
ADD="/${1}/a\\${2}"
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
# echo $ADD
|
|
||||||
sed -i '/^'"${BLOCK_BEGIN}"'/,/^'"${BLOCK_END}"$'/ {
|
|
||||||
'"${ADD}"'
|
|
||||||
}' "${BLOCK_FILE}"
|
|
||||||
}
|
|
||||||
|
|
||||||
block_remove_line () {
|
|
||||||
sed -i '/^'"${BLOCK_BEGIN}"'/,/^'"${BLOCK_END}"$'/ {
|
|
||||||
/'"${1}"'/d
|
|
||||||
}' "${BLOCK_FILE}"
|
|
||||||
}
|
|
||||||
|
|
||||||
block_change_line () {
|
|
||||||
sed -i '/^'"${BLOCK_BEGIN}"'/,/^'"${BLOCK_END}"$'/ {
|
|
||||||
/'"${1}"'/c\'"${2}"'
|
|
||||||
}' "${BLOCK_FILE}"
|
|
||||||
}
|
|
||||||
|
|
||||||
block_modify_line () {
|
|
||||||
sed -i '/^'"${BLOCK_BEGIN}"'/,/^'"${BLOCK_END}"$'/ {
|
|
||||||
/'"${BLOCK_BEGIN}"'/b
|
|
||||||
/'"${BLOCK_END}"'/b
|
|
||||||
/'"${1}"'/{s/'"${2}"'/'"${3}"'/}
|
|
||||||
}' "${BLOCK_FILE}"
|
|
||||||
}
|
|
|
@ -1,30 +0,0 @@
|
||||||
#!/bin/bash
|
|
||||||
rm test.txt
|
|
||||||
echo "some first text
|
|
||||||
some middle text
|
|
||||||
some after text" > test.txt
|
|
||||||
source ./block.sh
|
|
||||||
set-block -n "GO ENVIRONMENT" -d "comment before"
|
|
||||||
set-block -f "./test.txt"
|
|
||||||
# add-block "some middle text"
|
|
||||||
add-block
|
|
||||||
block-remove-content
|
|
||||||
block-add-line "1 added to beginning"
|
|
||||||
block-add-line --end "2 added to end"
|
|
||||||
block-add-line "3 yet another added to beginning"
|
|
||||||
block-add-line "4 yet yet another added to beginning -- remove later"
|
|
||||||
block-add-line --end "5 finally one added to end"
|
|
||||||
block-add-line ^2 "added after line 2"
|
|
||||||
block-add-line --before ^2 "added before line 2"
|
|
||||||
block-change-line "finally" "last line was changed to this"
|
|
||||||
echo modifying block
|
|
||||||
sleep 5
|
|
||||||
block-modify-line "3" yet **yet**
|
|
||||||
modify-block added *added*
|
|
||||||
echo removing line with "remove"
|
|
||||||
sleep 5
|
|
||||||
block-remove-line "remove"
|
|
||||||
echo "done with example, deleting"
|
|
||||||
sleep 5
|
|
||||||
echo removing block now
|
|
||||||
remove-block
|
|
|
@ -1,39 +0,0 @@
|
||||||
#!/bin/bash
|
|
||||||
function replace {
|
|
||||||
local PATTERN=$1; shift
|
|
||||||
local NEW_LINE=$1; shift
|
|
||||||
local FILE=$1; shift
|
|
||||||
[ ! "$PATTERN" ] || [ ! $FILE ] && return 1
|
|
||||||
local BEFORE=$1
|
|
||||||
local NEW=$(echo "${NEW_LINE}" | sed 's/\//\\\//g')
|
|
||||||
echo finding: $PATTERN Replace with $NEW before $BEFORE in $FILE
|
|
||||||
touch "${FILE}" || return 1
|
|
||||||
echo matching: $PATTERN
|
|
||||||
match=false
|
|
||||||
if [ "$NEW_LINE" ]; then
|
|
||||||
sed -i '/'"${PATTERN}"'/{s/.*/'"${NEW}"'/;h};${x;/./{x;q100};{x;q20}}' "${FILE}"
|
|
||||||
[[ $? -eq 100 ]] && match=true
|
|
||||||
echo match $match
|
|
||||||
if [ $match == false ]; then
|
|
||||||
echo adding new entry $NEW_LINE
|
|
||||||
if [ "$BEFORE" ]; then
|
|
||||||
echo searching for $BEFORE to add line before
|
|
||||||
# sed -i '/'"${BEFORE}"'/{i/.*/'"${NEW}"'/;h};${x;/./{x;q100};x}' "${FILE}"
|
|
||||||
sed -i '/'"${BEFORE}"'/!{q20};/'"${BEFORE}"'/i\'"${NEW}" "${FILE}"
|
|
||||||
echo return $?
|
|
||||||
exit
|
|
||||||
# ;/i '"${NEW}"'' "${FILE}"
|
|
||||||
[[ $? -eq 100 ]] && match=true || match=false
|
|
||||||
echo before match $match
|
|
||||||
fi
|
|
||||||
# if [ $match == false ]; then
|
|
||||||
# echo appending to file
|
|
||||||
# echo "${NEW_LINE}" >> "${FILE}"
|
|
||||||
# fi
|
|
||||||
else echo line matched/replaced
|
|
||||||
fi
|
|
||||||
else
|
|
||||||
sed '/'"${PATTERN}"'/d' "${FILE}"
|
|
||||||
echo line removed
|
|
||||||
fi
|
|
||||||
}
|
|
|
@ -4,6 +4,9 @@
|
||||||
# if no output file then the bundled source is returned
|
# if no output file then the bundled source is returned
|
||||||
# it can be immediately invoked like this
|
# it can be immediately invoked like this
|
||||||
# source <(bundle myscript.sh)
|
# source <(bundle myscript.sh)
|
||||||
|
# or
|
||||||
|
# scpt=$(bundle myscript.sh)
|
||||||
|
# source <(echo -e "$scpt")
|
||||||
|
|
||||||
bundle () {
|
bundle () {
|
||||||
|
|
||||||
|
@ -13,7 +16,7 @@ module_load file
|
||||||
if [[ ! $2 == "__recurse__" ]]; then
|
if [[ ! $2 == "__recurse__" ]]; then
|
||||||
tmp_file=$( mktemp -t TEMP_FILE_bundle.XXXXXXXX )
|
tmp_file=$( mktemp -t TEMP_FILE_bundle.XXXXXXXX )
|
||||||
chmod 600 "$tmp_file"
|
chmod 600 "$tmp_file"
|
||||||
cp $1 $tmp_file
|
\cp $1 $tmp_file
|
||||||
else
|
else
|
||||||
tmp_file=$1
|
tmp_file=$1
|
||||||
fi
|
fi
|
||||||
|
@ -35,8 +38,8 @@ fi
|
||||||
|
|
||||||
if [[ ! $2 == "__recurse__" ]]; then
|
if [[ ! $2 == "__recurse__" ]]; then
|
||||||
if [[ $2 ]]; then
|
if [[ $2 ]]; then
|
||||||
cp $tmp_file $2
|
\cp $tmp_file $2
|
||||||
echo $2
|
# echo $2
|
||||||
else
|
else
|
||||||
echo -e "$(cat $tmp_file)"
|
echo -e "$(cat $tmp_file)"
|
||||||
fi
|
fi
|
||||||
|
|
|
@ -203,8 +203,6 @@ source_dir () {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
prepend_file () {
|
prepend_file () {
|
||||||
# ----------------------------------------------------------------------------------------------------------------------
|
# ----------------------------------------------------------------------------------------------------------------------
|
||||||
# usage prepend_file <somefile> <anotherfile>
|
# usage prepend_file <somefile> <anotherfile>
|
||||||
|
@ -214,8 +212,8 @@ prepend_file () {
|
||||||
# ----------------------------------------------------------------------------------------------------------------------
|
# ----------------------------------------------------------------------------------------------------------------------
|
||||||
|
|
||||||
# check # echo $1 $2
|
# check # echo $1 $2
|
||||||
[[ -f $1 ]] || { iecho "no file $1 to prepend";return 1; }
|
[[ -f $1 ]] || return 1
|
||||||
[[ -f $2 ]] || { iecho "no file $2 to which to prepend $1";return 2; }
|
[[ -f $2 ]] || return 2
|
||||||
# init
|
# init
|
||||||
tmp_fn=$( mktemp -t TEMP_FILE_prepend.XXXXXXXX )
|
tmp_fn=$( mktemp -t TEMP_FILE_prepend.XXXXXXXX )
|
||||||
chmod 600 "$tmp_fn"
|
chmod 600 "$tmp_fn"
|
||||||
|
@ -225,7 +223,6 @@ cat $2 >> $tmp_fn
|
||||||
\mv "$tmp_fn" "$2"
|
\mv "$tmp_fn" "$2"
|
||||||
# cleanup
|
# cleanup
|
||||||
rm -f "$tmp_fn"
|
rm -f "$tmp_fn"
|
||||||
iecho "file $1 prepened to $2"
|
|
||||||
return 0
|
return 0
|
||||||
|
|
||||||
# [End]
|
# [End]
|
||||||
|
|
|
@ -1,13 +1,26 @@
|
||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
|
|
||||||
|
# do not add code here for non-interative login shell
|
||||||
|
# rather put additional non-interactive profile script code in files in /etc/profile.d
|
||||||
|
|
||||||
|
# this files is sourced for all login shells and also interactive non-login shells via /etc/bash.bashrc
|
||||||
|
# more info see http://www.linuxfromscratch.org/blfs/view/svn/postlfs/profile.html
|
||||||
|
|
||||||
|
# interactive non-login and login shells will call the BASH_SHELL_LOAD script below
|
||||||
|
# non-interative login shells only source /etc/profile.d
|
||||||
|
# in profile.d is 03-startup.sh which will call
|
||||||
|
# any of the scripts in a repo's startup subdirectory
|
||||||
|
# non-interactive non-login shells are not handled here only via /etc/bash.bashrc
|
||||||
|
# interactive login
|
||||||
|
|
||||||
# do not add code here.
|
|
||||||
# organize additional profile script code in files /etc/profile.d
|
|
||||||
|
|
||||||
([ -n "$SSH_CONNECTION" ] || [ -n "$SSH_CLIENT" ] || [ -n "$SSH_TTY" ]) && export SSH_SESSION=true
|
([ -n "$SSH_CONNECTION" ] || [ -n "$SSH_CLIENT" ] || [ -n "$SSH_TTY" ]) && export SSH_SESSION=true
|
||||||
[[ $- == *i* ]] && export SHELL_INTERACTIVE=true
|
[[ $- == *i* ]] && export SHELL_INTERACTIVE=true
|
||||||
shopt -q login_shell && export SHELL_LOGIN=true
|
shopt -q login_shell && export SHELL_LOGIN=true
|
||||||
[ $EUID -eq 0 ] && export USER_ROOT=true
|
[ $EUID -eq 0 ] && export USER_ROOT=true
|
||||||
|
|
||||||
|
# uncomment for debugging non-interactive login shell, i.e. $ . /etc/profile
|
||||||
|
#unset SHELL_INTERACTIVE
|
||||||
|
|
||||||
#uncomment these for debugging.
|
#uncomment these for debugging.
|
||||||
# echo ---- sourcing system /etc/profile ---
|
# echo ---- sourcing system /etc/profile ---
|
||||||
|
@ -17,32 +30,32 @@ shopt -q login_shell && export SHELL_LOGIN=true
|
||||||
# [[ $SSH_SESSION ]] && echo ssh remote user || echo local user
|
# [[ $SSH_SESSION ]] && echo ssh remote user || echo local user
|
||||||
# echo ---------------------
|
# echo ---------------------
|
||||||
|
|
||||||
# main /etc/profile loaded for all logins
|
|
||||||
# more info see http://www.linuxfromscratch.org/blfs/view/svn/postlfs/profile.html
|
|
||||||
|
|
||||||
# Set the initial path
|
# Set the initial path
|
||||||
export PATH=/bin:/usr/bin:/usr/local/bin
|
export PATH=/bin:/usr/bin:/usr/local/bin
|
||||||
# set directory for base shell repo
|
# set directory for base shell repo
|
||||||
export BASH_SHELL_BASE=THISWILLCHANGEDBYDEPLOYSCRIPT
|
export BASH_SHELL_BASE=THISWILLCHANGEDBYDEPLOYSCRIPT
|
||||||
# now bootstrap by souring the shell repo envinroment
|
# now bootstrap by souring the shell repo envinroment
|
||||||
source $BASH_SHELL_BASE/shell.env
|
source $BASH_SHELL_BASE/shell.env
|
||||||
# uncomment to NOT load the BASH SHELL Repos for interactive login shell
|
# set $BASH_SAFE_MODE=true in shell.env to disable UCI interactive shell from loading
|
||||||
# NO_BASH_SHELL=true
|
# TODO see if $NO_BASH_SHELL_SSH=true in user or host directory (at the remote machine)
|
||||||
|
# if so don't source the load command below and make just a simple prompt.
|
||||||
if [[ $SHELL_INTERACTIVE ]]; then
|
if [[ $SHELL_INTERACTIVE ]]; then
|
||||||
if [[ ! $NO_BASH_SHELL ]]; then
|
if [[ ! $BASH_SAFE_MODE ]]; then
|
||||||
# echo interactive shell loading $BASH_SHELL_LOAD
|
# echo interactive shell loading $BASH_SHELL_LOAD
|
||||||
source "$BASH_SHELL_LOAD"
|
source "$BASH_SHELL_LOAD"
|
||||||
else
|
else
|
||||||
|
# safe mode
|
||||||
# just set a simple prompt instead
|
# just set a simple prompt instead
|
||||||
NORMAL="\[\e[0m\]"
|
NORMAL="\[\e[0m\]"
|
||||||
RED="\[\e[1;31m\]"
|
RED="\[\e[1;31m\]"
|
||||||
GREEN="\[\e[1;32m\]"
|
GREEN="\[\e[1;32m\]"
|
||||||
|
YELLOW='\e[1;33m'
|
||||||
if [[ $EUID == 0 ]] ; then
|
if [[ $EUID == 0 ]] ; then
|
||||||
PS1="$RED\u [ $NORMAL\w$RED ]# $NORMAL"
|
PS1="${YELLOW}SAFE:$RED\u [ $NORMAL\w$RED ]# $NORMAL"
|
||||||
else
|
else
|
||||||
PS1="$GREEN\u [ $NORMAL\w$GREEN ]\$ $NORMAL"
|
PS1="${YELLOW}SAFE:$GREEN \u [ $NORMAL\w$GREEN ]\$ $NORMAL"
|
||||||
fi
|
fi
|
||||||
unset RED GREEN NORMAL
|
unset RED GREEN NORMAL YELLOW
|
||||||
fi
|
fi
|
||||||
else
|
else
|
||||||
# this is non-interactive login (e.g. at user machine login)
|
# this is non-interactive login (e.g. at user machine login)
|
||||||
|
|
120
shell.env
120
shell.env
|
@ -1,63 +1,76 @@
|
||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
# Shell Repos Environment
|
# UCI SHELL REPOS ENVIRONMENT
|
||||||
# Customize Bash Shell setup here
|
# 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
|
||||||
|
|
||||||
|
# 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
|
# if bash is not installed then don't bother to continue
|
||||||
! command -v bash >/dev/null 2>&1 && echo no bash command && return 1
|
! command -v bash >/dev/null 2>&1 && echo no bash command && return 1
|
||||||
export SHELL=$(command -v bash )
|
export SHELL=$(command -v bash )
|
||||||
|
|
||||||
# sourced for non-login interactive shells
|
# without changing /etc/profile you can disable loading the UCI Shell system
|
||||||
# sourced via /etc/bash.bashrc so for all machine users
|
# by uncommenting this line. It will only set up a simple prompt instead.
|
||||||
# $BASH_SHELL_BASE # this MUST be set in /etc/profile
|
# if UCI shell is causing issues then one can invoke this
|
||||||
# $BASH_SHELL_HOST=$BASH_SHELL_BASE
|
# BASH_SAFE_MODE=true
|
||||||
# $BASH_SHELL_NETWORK/all
|
# todo add safemode enable/disable function that (un)comments
|
||||||
# $BASH_NETWORK_DIR # extra directory to look for networks, $BASH_SHELL_NETWORK is always checked
|
|
||||||
# $BASH_SHELL_HOST/all
|
|
||||||
# $BASH_SHELL_HOST/<hostname>
|
|
||||||
# also
|
|
||||||
# sourced via $HOME/.bashrc
|
|
||||||
# $HOME/shell or $HOME/BASH_SHELL_USER
|
|
||||||
|
|
||||||
# for the rare interactive login shell
|
if [[ $BASH_SAFE_MODE ]]; then
|
||||||
# if you don't want the repos above sourced uncomment this next line
|
RED='\033[0;31m';NC='\033[0m'
|
||||||
# $NO_LOGIN_BASHRC=true
|
printf "${RED}BASH SHELL SAFE MODE ENABLED${NC}\n"
|
||||||
# this does not effect non-interactive login shells like at user first login
|
export BASH_SAFE_MODE;
|
||||||
|
return 2
|
||||||
|
fi
|
||||||
|
|
||||||
# within each of those directories if load.sh exits it will be run
|
# You can overwrite the default environment variables in this file
|
||||||
# otherwise files will be sourced exactly like load.sh in the base
|
# There is NOT a lot of reasons to do so unless you prefer other directory locations
|
||||||
|
|
||||||
# Using base shell setup repository
|
|
||||||
# https://git.kebler.net/kebler.net/bash-shell-base.git
|
|
||||||
|
|
||||||
|
|
||||||
# BASH_SHELL_BASE is set in /etc/profile do not change here!
|
|
||||||
|
|
||||||
|
# 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_LOAD=$BASH_SHELL_BASE/load.sh # load.sh is default
|
||||||
export BASH_SHELL_STARTUP=$BASH_SHELL_BASE/startup.sh # strtup.sh is default
|
|
||||||
# if uncommented next lines sets up implicit sourcing for non-interactive shells
|
|
||||||
|
|
||||||
# echo ----NON_INTERACTIVE SHELL-----
|
export BASH_SHELL_STARTUP=$BASH_SHELL_BASE/startup.sh # startup.sh is default
|
||||||
# echo enabling bash shell repos for non-inactive shell
|
|
||||||
# export BASH_ENV=$BASH_SHELL_LOAD # same as interactive shell, beware usually too much
|
|
||||||
export BASH_ENV=$BASH_SHELL_BASE/module.lib # load module loading functions
|
|
||||||
# echo enabling aliases with non-interactive shell
|
|
||||||
export BASH_USE_ALIAS=true # will source aliases for non-interactive
|
|
||||||
# echo see $BASH_SHELL_BASE/shell.env
|
|
||||||
# echo ---------
|
|
||||||
|
|
||||||
# if not using implicit sourcing for non-interactive shells then one can do this per script
|
# for non-interactive login shells (like at boot)
|
||||||
##################
|
# load this library that allows loading additional modules
|
||||||
# expanding aliases is optional
|
export BASH_ENV=$BASH_SHELL_BASE/module.lib # module loading functions
|
||||||
# shopt -s expand_aliases
|
# otherwise comment above and uncommented next line
|
||||||
# source $BASH_SHELL_LOAD
|
# export BASH_ENV=$BASH_SHELL_LOAD # load same as interactive shell, beware usually causes issues!!!
|
||||||
# < your script code >
|
|
||||||
# shopt -u expand_aliases
|
|
||||||
####################
|
|
||||||
|
|
||||||
# set ssh session if non-interactive only
|
# set ssh session if non-interactive only
|
||||||
([ -n "$SSH_CONNECTION" ] || [ -n "$SSH_CLIENT" ] || [ -n "$SSH_TTY" ]) && export SSH_SESSION=true
|
([ -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
|
||||||
|
# -- 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.
|
||||||
|
|
||||||
BASH_SHELL_DIRS="$BASH_SHELL_BASE "
|
BASH_SHELL_DIRS="$BASH_SHELL_BASE "
|
||||||
|
|
||||||
declare parent
|
declare parent
|
||||||
parent=$(dirname $BASH_SHELL_BASE)
|
parent=$(dirname $BASH_SHELL_BASE)
|
||||||
|
|
||||||
|
@ -96,6 +109,11 @@ network_dirs "$BASH_SHELL_HOST/.networks"
|
||||||
# these loaded only for specific user on a host
|
# these loaded only for specific user on a host
|
||||||
network_dirs "$HOME/${BASH_SHELL_USER:-"shell"}/.networks"
|
network_dirs "$HOME/${BASH_SHELL_USER:-"shell"}/.networks"
|
||||||
|
|
||||||
|
# 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 "
|
||||||
|
|
||||||
export BASH_SHELL_DIRS
|
export BASH_SHELL_DIRS
|
||||||
|
|
||||||
# echo ALL DIRS: $BASH_SHELL_DIRS
|
# echo ALL DIRS: $BASH_SHELL_DIRS
|
||||||
|
@ -109,6 +127,18 @@ export BASH_SHELL_DIRS
|
||||||
# echo $BASH_SHELL_DIRS
|
# echo $BASH_SHELL_DIRS
|
||||||
# echo ---------------------------------
|
# echo ---------------------------------
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
# echo end shell env
|
# echo end shell env
|
||||||
|
|
||||||
|
|
||||||
|
#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
|
||||||
|
####################
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
|
|
||||||
[[ $(declare -F | grep module_load) ]] && echo module lib already loaded || source "$BASH_SHELL_BASE/module.lib"
|
[[ $(declare -F | grep module_load) ]] && echo module lib already loaded || source "$BASH_SHELL_BASE/module.lib"
|
||||||
module_load file
|
module_load file
|
||||||
[[ $? -ne 0 ]] && echo unable to access the file module, aboarting load && return 1
|
[[ $? -ne 0 ]] && echo unable to access the file module, aborting load && return 1
|
||||||
|
|
||||||
DIRS=(${BASH_SHELL_DIRS})
|
DIRS=(${BASH_SHELL_DIRS})
|
||||||
# llog "startup directories to try ${DIRS[*]}"
|
# llog "startup directories to try ${DIRS[*]}"
|
||||||
|
|
|
@ -1,12 +0,0 @@
|
||||||
#!/bin/bash
|
|
||||||
echo path functions test script
|
|
||||||
src=$BASH_SHELL_BASE/function/01-path
|
|
||||||
[[ -f $src ]] && source "$src" || echo no file: $src
|
|
||||||
export test_path=/bin:/usr/bin:/opt/go/bin
|
|
||||||
ins=/usr/sbin
|
|
||||||
path_insert $ins after /usr/bin test_path
|
|
||||||
path_insert $ins before /usr/bin test_path
|
|
||||||
path_insert $ins after /opt/go/bin test_path
|
|
||||||
path_insert $ins before ^/bin: test_path
|
|
||||||
unset test_path
|
|
||||||
unset ins
|
|
Loading…
Reference in New Issue