mirror of
https://github.com/natelandau/shell-scripting-templates.git
synced 2025-11-08 13:13:47 -05:00
147 lines
4.3 KiB
Bash
147 lines
4.3 KiB
Bash
# Functions required to allow the script template and alert functions to be used
|
|
# shellcheck disable=SC2154
|
|
|
|
# shellcheck disable=SC2120
|
|
_acquireScriptLock_() {
|
|
# DESC:
|
|
# Acquire script lock to prevent running the same script a second time before the
|
|
# first instance exits
|
|
# ARGS:
|
|
# $1 (optional) - Scope of script execution lock (system or user)
|
|
# OUTS:
|
|
# exports $SCRIPT_LOCK - Path to the directory indicating we have the script lock
|
|
# Exits script if lock cannot be acquired
|
|
# NOTE:
|
|
# If the lock was acquired it's automatically released in _safeExit_()
|
|
|
|
local _lockDir
|
|
if [[ ${1:-} == 'system' ]]; then
|
|
_lockDir="${TMPDIR:-/tmp/}$(basename "$0").lock"
|
|
else
|
|
_lockDir="${TMPDIR:-/tmp/}$(basename "$0").${UID}.lock"
|
|
fi
|
|
|
|
if command mkdir "${_lockDir}" 2>/dev/null; then
|
|
readonly SCRIPT_LOCK="${_lockDir}"
|
|
debug "Acquired script lock: ${yellow}${SCRIPT_LOCK}${purple}"
|
|
else
|
|
if declare -f "_safeExit_" &>/dev/null; then
|
|
error "Unable to acquire script lock: ${yellow}${_lockDir}${red}"
|
|
fatal "If you trust the script isn't running, delete the lock dir"
|
|
else
|
|
printf "%s\n" "ERROR: Could not acquire script lock. If you trust the script isn't running, delete: ${_lockDir}"
|
|
exit 1
|
|
fi
|
|
|
|
fi
|
|
}
|
|
|
|
_makeTempDir_() {
|
|
# DESC:
|
|
# Creates a temp directory to house temporary files
|
|
# ARGS:
|
|
# $1 (Optional) - First characters/word of directory name
|
|
# OUTS:
|
|
# Sets $TMP_DIR variable to the path of the temp directory
|
|
# USAGE:
|
|
# _makeTempDir_ "$(basename "$0")"
|
|
|
|
[ -d "${TMP_DIR:-}" ] && return 0
|
|
|
|
if [ -n "${1:-}" ]; then
|
|
TMP_DIR="${TMPDIR:-/tmp/}${1}.${RANDOM}.${RANDOM}.$$"
|
|
else
|
|
TMP_DIR="${TMPDIR:-/tmp/}$(basename "$0").${RANDOM}.${RANDOM}.${RANDOM}.$$"
|
|
fi
|
|
(umask 077 && mkdir "${TMP_DIR}") || {
|
|
fatal "Could not create temporary directory! Exiting."
|
|
}
|
|
debug "\$TMP_DIR=${TMP_DIR}"
|
|
}
|
|
|
|
_safeExit_() {
|
|
# DESC:
|
|
# Cleanup and exit from a script
|
|
# ARGS:
|
|
# $1 (optional) - Exit code (defaults to 0)
|
|
# OUTS:
|
|
# None
|
|
|
|
if [[ -d ${SCRIPT_LOCK:-} ]]; then
|
|
if command rm -rf "${SCRIPT_LOCK}"; then
|
|
debug "Removing script lock"
|
|
else
|
|
warning "Script lock could not be removed. Try manually deleting ${yellow}'${SCRIPT_LOCK}'"
|
|
fi
|
|
fi
|
|
|
|
if [[ -n ${TMP_DIR:-} && -d ${TMP_DIR:-} ]]; then
|
|
if [[ ${1:-} == 1 && -n "$(ls "${TMP_DIR}")" ]]; then
|
|
command rm -r "${TMP_DIR}"
|
|
else
|
|
command rm -r "${TMP_DIR}"
|
|
debug "Removing temp directory"
|
|
fi
|
|
fi
|
|
|
|
trap - INT TERM EXIT
|
|
exit "${1:-0}"
|
|
}
|
|
|
|
_setPATH_() {
|
|
# DESC:
|
|
# Add directories to $PATH so script can find executables
|
|
# ARGS:
|
|
# $@ - One or more paths
|
|
# OPTS:
|
|
# -x - Fail if directories are not found
|
|
# OUTS:
|
|
# 0: Success
|
|
# 1: Failure
|
|
# Adds items to $PATH
|
|
# USAGE:
|
|
# _setPATH_ "/usr/local/bin" "${HOME}/bin" "$(npm bin)"
|
|
|
|
[[ $# == 0 ]] && fatal "Missing required argument to ${FUNCNAME[0]}"
|
|
|
|
local opt
|
|
local OPTIND=1
|
|
local _failIfNotFound=false
|
|
|
|
while getopts ":xX" opt; do
|
|
case ${opt} in
|
|
x | X) _failIfNotFound=true ;;
|
|
*)
|
|
{
|
|
error "Unrecognized option '${1}' passed to _backupFile_" "${LINENO}"
|
|
return 1
|
|
}
|
|
;;
|
|
esac
|
|
done
|
|
shift $((OPTIND - 1))
|
|
|
|
local _newPath
|
|
|
|
for _newPath in "$@"; do
|
|
if [ -d "${_newPath}" ]; then
|
|
if ! printf "%s" "${PATH}" | grep -Eq "(^|:)${_newPath}($|:)"; then
|
|
if PATH="${_newPath}:${PATH}"; then
|
|
debug "Added '${_newPath}' to PATH"
|
|
else
|
|
debug "'${_newPath}' already in PATH"
|
|
fi
|
|
else
|
|
debug "_setPATH_: '${_newPath}' already exists in PATH"
|
|
fi
|
|
else
|
|
debug "_setPATH_: can not find: ${_newPath}"
|
|
if [[ ${_failIfNotFound} == true ]]; then
|
|
return 1
|
|
fi
|
|
continue
|
|
fi
|
|
done
|
|
return 0
|
|
}
|