moved and refactored network-dirs and shell-process-directory
parent
784e6711a8
commit
d0209fc742
|
@ -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
|
|
||||||
}
|
|
|
@ -0,0 +1,40 @@
|
||||||
|
# to be sourced (below) not run in subshell!
|
||||||
|
function network_dirs () {
|
||||||
|
|
||||||
|
(return 0 2>/dev/null) || (echo network_dirs must be sourced; return 1)
|
||||||
|
|
||||||
|
module_load path
|
||||||
|
[[ $? -ne 0 ]] && echo unable to access the file module, aboarting load && return 1
|
||||||
|
|
||||||
|
|
||||||
|
local network
|
||||||
|
[[ ! -f $1 ]] && return
|
||||||
|
|
||||||
|
while read -r network || [ -n "$network" ]
|
||||||
|
do
|
||||||
|
if [[ ${network} = *!* ]]; then
|
||||||
|
network=${network/!/}
|
||||||
|
NETWORK_HOME=$network
|
||||||
|
fi
|
||||||
|
[[ $2 ]] && network=$2/$network
|
||||||
|
if [[ $(isAbsPath $network) ]]; then
|
||||||
|
[[ ! -d $network ]] && continue
|
||||||
|
else
|
||||||
|
if [[ -d ${BASH_SHELL_USER}/${network} ]];then
|
||||||
|
network=${BASH_SHELL_USER}/${network}
|
||||||
|
else
|
||||||
|
if [[ -d ${BASH_NETWORKS_DIR}/${network} ]];then
|
||||||
|
network=${BASH_NETWORKS_DIR}/${network}
|
||||||
|
else
|
||||||
|
continue
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
[[ $network =~ $NETWORK_HOME ]] && NETWORK_HOME_DIR=${network}
|
||||||
|
BASH_SHELL_NETWORK_DIRS+="${network} "
|
||||||
|
BASH_SHELL_DIRS+="${network} "
|
||||||
|
done < "$1"
|
||||||
|
export NETWORK_HOME
|
||||||
|
export NETWORK_HOME_DIR
|
||||||
|
export BASH_SHELL_NETWORK_DIRS
|
||||||
|
}
|
|
@ -0,0 +1,63 @@
|
||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
function shell_process_directory () {
|
||||||
|
local SUBDIRS
|
||||||
|
local DIR
|
||||||
|
|
||||||
|
module_load file
|
||||||
|
[[ $? -ne 0 ]] && echo unable to access the file module, aborting load && return 1
|
||||||
|
|
||||||
|
|
||||||
|
DIR=${1:-$BASH_SHELL_BASE}
|
||||||
|
# echo soucring directory $DIR
|
||||||
|
# if [[ $DIR = "$BASH_SHELL_BASE" ]]; then
|
||||||
|
# BASH_SHELL_IGNORE=$(shell_get_ignores)
|
||||||
|
# excludes=$BASH_SHELL_IGNORE
|
||||||
|
# else
|
||||||
|
# excludes=$(shell_get_ignores $DIR)
|
||||||
|
# [[ $? -ne 0 ]] && excludes=$BASH_SHELL_IGNORE
|
||||||
|
# fi
|
||||||
|
|
||||||
|
if [ -d "$DIR" ]; then
|
||||||
|
if [ "$DIR" = "$BASH_SHELL_BASE" ] && [ "$BASH_SHELL_BASE_LOADED" = "true" ]; then
|
||||||
|
if [ -v PS1 ]; then
|
||||||
|
echo base directory already sourced
|
||||||
|
read -p "do you want to re-source the base (not recommended)? " -n 1 -r
|
||||||
|
echo
|
||||||
|
[[ ! $REPLY =~ ^[Yy]$ ]] && return 1
|
||||||
|
# else
|
||||||
|
# echo non-interactive shell
|
||||||
|
# return 1
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [[ $DIR != "$BASH_SHELL_BASE" ]] && [[ -f $DIR/load.sh ]]; then
|
||||||
|
# echo "$DIR/load.sh" found, running instead of default load
|
||||||
|
source "$DIR/load.sh"
|
||||||
|
else
|
||||||
|
# default processing
|
||||||
|
local SUBDIRS
|
||||||
|
local IGNORE_FILE
|
||||||
|
SUBDIRS=$([[ -f "$DIR/.bash-shell-include" ]] && cat "$DIR/.bash-shell-include" || cat "$BASH_SHELL_BASE/.bash-shell-include")
|
||||||
|
[[ $SSH_SESSION ]] && SUBDIRS+=" ssh/session"
|
||||||
|
IGNORE_FILE="$([[ -f "$DIR/.bash-shell-ignore" ]] && echo "$DIR" || echo "$BASH_SHELL_BASE")/.bash-shell-ignore"
|
||||||
|
for SUBDIR in $SUBDIRS; do
|
||||||
|
if [ -e "$DIR/$SUBDIR" ]; then
|
||||||
|
# echo processing subdirectory $DIR/$SUBDIR
|
||||||
|
# must quote all globs to avoid bash glob expansion which is likely on
|
||||||
|
# TODO have default set of ignores plus check for shell-ignore
|
||||||
|
# source_dir -p "archive" -x '"*.off" "*.md" "*TODO*" "LICENSE" "*.sample"' -d 0 $DIR/$SUBDIR
|
||||||
|
# source_dir -p "archive" -x "$excludes" -d 0 $DIR/$SUBDIR
|
||||||
|
source_dir -f "$IGNORE_FILE" -d 0 $DIR/$SUBDIR
|
||||||
|
# else
|
||||||
|
# echo no subdirectory $DIR/$SUBDIR to process, ignorning
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
fi
|
||||||
|
# echo "done sourcing directory $DIR"
|
||||||
|
# else
|
||||||
|
# echo $DIR does not exist nothing to source
|
||||||
|
fi
|
||||||
|
|
||||||
|
}
|
||||||
|
|
|
@ -0,0 +1,112 @@
|
||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
# clone a user
|
||||||
|
|
||||||
|
function clone_user_ () {
|
||||||
|
|
||||||
|
module_load confirm
|
||||||
|
type confirm
|
||||||
|
|
||||||
|
echo "============="
|
||||||
|
echo "this script will create a new user"
|
||||||
|
echo "based on an existing user's data"
|
||||||
|
echo
|
||||||
|
echo "You will be shown a list of users who can currently log on"
|
||||||
|
echo "Remember which user you would like to clone."
|
||||||
|
echo "You will be asked for the new user's name, their password"
|
||||||
|
echo "and the old user to clone".
|
||||||
|
echo "============="
|
||||||
|
echo
|
||||||
|
|
||||||
|
echo -n "New user's name: "
|
||||||
|
read newuser
|
||||||
|
|
||||||
|
echo -n "New user's password: "
|
||||||
|
read newpassword
|
||||||
|
|
||||||
|
echo
|
||||||
|
|
||||||
|
echo "Current users you can clone:"
|
||||||
|
echo "----"
|
||||||
|
awk -F'[/:]' '{if ($3 >= 1000 && $3 != 65534) print $1}' /etc/passwd
|
||||||
|
echo
|
||||||
|
|
||||||
|
echo -n "Old user to clone: "
|
||||||
|
read olduser
|
||||||
|
echo "olduser uid is $(id -u $olduser)"
|
||||||
|
|
||||||
|
echo
|
||||||
|
echo "You have selected: "
|
||||||
|
echo "----"
|
||||||
|
echo "new user: $newuser"
|
||||||
|
echo "new user password: $newpassword"
|
||||||
|
echo "old user: $olduser"
|
||||||
|
echo
|
||||||
|
|
||||||
|
olduser_GROUPS="$(id -Gn ${olduser} | sed "s/${olduser} //g" | sed "s/ ${olduser}//g" | sed "s/ /,/g"),$olduser"
|
||||||
|
olduser_SHELL=$(awk -F : -v name=${olduser} '(name == $1) { print $7 }' /etc/passwd)
|
||||||
|
|
||||||
|
echo "old user groups: "
|
||||||
|
echo "----"
|
||||||
|
echo $olduser_GROUPS
|
||||||
|
echo "olduser shell: "
|
||||||
|
echo $olduser_SHELL
|
||||||
|
# read -rsp $'Press any key to continue or ctrl-c to exit...\n' -n1 key
|
||||||
|
# return
|
||||||
|
# confirm "ready to clone user, begin?" || return 1
|
||||||
|
|
||||||
|
# useradd --groups $olduser_GROUPS --shell $olduser_SHELL $newuser
|
||||||
|
|
||||||
|
# echo $newuser:$newpassword | chpasswd
|
||||||
|
|
||||||
|
# read -rsp $'ready to make home direcoty -- ctrl-c to exit...\n' -n1 key
|
||||||
|
|
||||||
|
# mkdir /home/$newuser
|
||||||
|
# chown -R $newuser:$newuser /home/$newuser
|
||||||
|
|
||||||
|
# echo
|
||||||
|
# echo "Script should be done now."
|
||||||
|
# echo
|
||||||
|
# echo "Do you see your new users name below?"
|
||||||
|
# echo
|
||||||
|
# awk -F'[/:]' '{if ($3 >= 1000 && $3 != 65534) print $1}' /etc/passwd
|
||||||
|
|
||||||
|
# echo
|
||||||
|
# echo "We are now going to copy the old user's home folder to the new user"
|
||||||
|
# echo "then change ownership to the new user"
|
||||||
|
# echo
|
||||||
|
# read -rsp $'Ready to copy home folder --- or ctrl-c to exit...\n' -n1 key
|
||||||
|
|
||||||
|
|
||||||
|
rsync -aPv --exclude 'Downloads' /home/$olduser/. /home/$newuser/
|
||||||
|
chown -R --from=$olduser $newuser:$newuser /home/$newuser
|
||||||
|
|
||||||
|
echo
|
||||||
|
echo "Now we are going to change the names of files and folders to the new user"
|
||||||
|
echo
|
||||||
|
|
||||||
|
grep -rlI $olduser /home/$newuser/ . | sudo xargs sed -i 's/$olduser/$newuser/g'
|
||||||
|
|
||||||
|
echo
|
||||||
|
echo "Done now."
|
||||||
|
echo
|
||||||
|
read -rsp $'Press any key to exit...\n' -n1 key
|
||||||
|
echo
|
||||||
|
echo
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
clone_user () {
|
||||||
|
if [[ $EUID != 0 ]]; then
|
||||||
|
|
||||||
|
clone=$(declare -f clone_user_)
|
||||||
|
module_load confirm
|
||||||
|
confirm=$(declare -f confirm)
|
||||||
|
sudo bash -c "$confirm; $clone; clone_user_"
|
||||||
|
else
|
||||||
|
echo run as regular user with sudo privliges and it will elevate
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
# # if script was executed then call the function
|
||||||
|
(return 0 2>/dev/null) || clone_user
|
|
@ -0,0 +1,113 @@
|
||||||
|
#!/bin/bash
|
||||||
|
# (c) Wolfgang Ziegler // fago
|
||||||
|
#
|
||||||
|
# Inotify script to trigger a command on file changes.
|
||||||
|
#
|
||||||
|
# The script triggers the command as soon as a file event occurs. Events
|
||||||
|
# occurring during command execution are aggregated and trigger a single command
|
||||||
|
# execution only.
|
||||||
|
#
|
||||||
|
# Usage example: Trigger rsync for synchronizing file changes.
|
||||||
|
# ./watch.sh rsync -Cra --out-format='[%t]--%n' --delete SOURCE TARGET
|
||||||
|
#
|
||||||
|
# ./watch.sh rsync -Cra --out-format='[%t]--%n' --include core \
|
||||||
|
# --WATCH_EXCLUDE=sites/default/files --delete ../web/ vagrant@d8.local:/var/www
|
||||||
|
|
||||||
|
######### Configuration #########
|
||||||
|
|
||||||
|
watch() {
|
||||||
|
|
||||||
|
EVENTS="CREATE,CLOSE_WRITE,DELETE,MODIFY,MOVED_FROM,MOVED_TO"
|
||||||
|
COMMAND="$@"
|
||||||
|
|
||||||
|
# echo $COMMAND $WATCH_DIR, $WATCH_VERBOSE
|
||||||
|
## The directory to watch.
|
||||||
|
if [ -z "WATCH_DIR" ]; then
|
||||||
|
WATCH_DIR=.
|
||||||
|
fi
|
||||||
|
|
||||||
|
## WATCH_EXCLUDE Git and temporary files from PHPstorm from watching.
|
||||||
|
if [ -z "$WATCH_EXCLUDE" ]; then
|
||||||
|
WATCH_EXCLUDE='(\.git|___jb_)'
|
||||||
|
fi
|
||||||
|
|
||||||
|
## Whether to enable verbosity. If enabled, change events are output.
|
||||||
|
if [ -z "WATCH_VERBOSE" ]; then
|
||||||
|
WATCH_VERBOSE=0
|
||||||
|
fi
|
||||||
|
|
||||||
|
##################################
|
||||||
|
|
||||||
|
if [ -z "$1" ]; then
|
||||||
|
echo "Usage: $0 Command"
|
||||||
|
exit 1;
|
||||||
|
fi
|
||||||
|
|
||||||
|
##
|
||||||
|
## Setup pipes. For usage with read we need to assign them to file descriptors.
|
||||||
|
##
|
||||||
|
RUN=$(mktemp -u)
|
||||||
|
mkfifo "$RUN"
|
||||||
|
exec 3<>$RUN
|
||||||
|
|
||||||
|
RESULT=$(mktemp -u)
|
||||||
|
mkfifo "$RESULT"
|
||||||
|
exec 4<>$RESULT
|
||||||
|
|
||||||
|
clean_up () {
|
||||||
|
## Cleanup pipes.
|
||||||
|
rm $RUN
|
||||||
|
rm $RESULT
|
||||||
|
}
|
||||||
|
|
||||||
|
## Execute "clean_up" on exit.
|
||||||
|
trap "clean_up" EXIT
|
||||||
|
|
||||||
|
|
||||||
|
##
|
||||||
|
## Run inotifywait in a loop that is not blocked on command execution and ignore
|
||||||
|
## irrelevant events.
|
||||||
|
##
|
||||||
|
|
||||||
|
inotifywait -m -q -r -e $EVENTS --exclude $WATCH_EXCLUDE --format '%w%f' $WATCH_DIR | \
|
||||||
|
while read FILE
|
||||||
|
do
|
||||||
|
if [ $WATCH_VERBOSE -ne 0 ]; then
|
||||||
|
echo [CHANGE] $FILE
|
||||||
|
fi
|
||||||
|
|
||||||
|
## Clear $PID if the last command has finished.
|
||||||
|
if [ ! -z "$PID" ] && ( ! ps -p $PID > /dev/null ); then
|
||||||
|
PID=""
|
||||||
|
fi
|
||||||
|
|
||||||
|
## If no command is being executed, execute one.
|
||||||
|
## Else, wait for the command to finish and then execute again.
|
||||||
|
if [ -z "$PID" ]; then
|
||||||
|
## Execute the following as background process.
|
||||||
|
## It runs the command once and repeats if we tell him so.
|
||||||
|
($COMMAND; while read -t0.001 -u3 LINE; do
|
||||||
|
echo running >&4
|
||||||
|
$COMMAND
|
||||||
|
done)&
|
||||||
|
|
||||||
|
PID=$!
|
||||||
|
WAITING=0
|
||||||
|
else
|
||||||
|
## If a previous waiting command has been executed, reset the variable.
|
||||||
|
if [ $WAITING -eq 1 ] && read -t0.001 -u4; then
|
||||||
|
WAITING=0
|
||||||
|
fi
|
||||||
|
|
||||||
|
## Tell the subprocess to execute the command again if it is not waiting
|
||||||
|
## for repeated execution already.
|
||||||
|
if [ $WAITING -eq 0 ]; then
|
||||||
|
echo "run" >&3
|
||||||
|
WAITING=1
|
||||||
|
fi
|
||||||
|
|
||||||
|
## If we are already waiting, there is nothing todo.
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
|
||||||
|
}
|
Loading…
Reference in New Issue